@krashnakant/next-keycloak
Version:
An authentication library based on Keycloak for NextJs applications
77 lines (70 loc) • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
});
var e = require("react");
const isServer = () => "undefined" == typeof window, getUserFromToken = e => {
const t = parseToken(e);
return {
sub: t.sub,
email: t.email,
name: t.given_name,
family: t.family_name
};
}, parseToken = e => {
const t = e.split(".")[1].replace("-", "+").replace("_", "/"), n = decodeURIComponent(atob(t).split("").map((function(e) {
return "%" + ("00" + e.charCodeAt(0).toString(16)).slice(-2);
})).join(""));
return JSON.parse(n);
}, t = isServer() ? null : require("keycloak-js");
let n = t;
const o = e.createContext({
loading: !0,
authenticated: !1,
login: e => {},
logout: e => {},
register: e => {},
hasRealmRole: e => !1,
accountManagement: () => {}
});
exports.NextKeycloakAuthProvider = ({children: a, config: r, initOption: i}) => {
const l = ((t, n = {}) => {
const [o, a] = e.useState();
e.useEffect((() => {
t && initialize();
}), []);
const initialize = async () => {
try {
await t.init(n), a(t);
} catch (e) {
console.error("failed to initialize keycloak");
}
};
return {
loading: !(null != o && o.authenticated && void 0 !== o.token),
token: o ? o.token : "",
authenticated: !!o && Boolean(o.authenticated),
userInfo: null != o && o.authenticated ? getUserFromToken(String(o.token)) : void 0,
login: e => {
if (o) return o.login(e);
},
logout: e => {
if (void 0 !== o) return o.logout(e);
},
register: e => {
if (o) return o.register(e);
},
hasRealmRole: e => !!o && o.hasRealmRole(e),
accountManagement: () => {
if (o) return o.accountManagement();
}
};
})(e.useMemo((() => (e => {
if (!isServer()) return n = "function" == typeof t.default ? new t.default(e) : new t(e),
n;
})(r)), [ r ]), i);
return e.createElement(o.Provider, {
value: l
}, a);
}, exports.useNextKeycloakAuth = () => e.useContext(o);
//# sourceMappingURL=next-keycloak.cjs.production.min.cjs.map