killian.s
08/17/2022, 5:25 AMrp_st
08/17/2022, 5:29 AMkillian.s
08/17/2022, 5:29 AMjavascript
import UserRoles from "supertokens-node/recipe/userroles";
import { User } from "../models";
const signInUpOverride = (originalImplementation: any) => {
return {
...originalImplementation,
thirdPartySignInUpPOST: async function (input: any) {
if (originalImplementation.thirdPartySignInUpPOST === undefined) {
throw Error("Should never come here");
}
let response = await originalImplementation.thirdPartySignInUpPOST(input);
if (response.status === "OK") {
if (response.createdNewUser) {
await UserRoles.addRoleToUser(response.user.id, "pending");
} else {
const user = await User.findOne({
userId: response.user.id,
});
if (user) {
user.logins = [...user.logins, new Date()];
await user.save();
}
}
}
return response;
},
};
};
export default signInUpOverride;
killian.s
08/17/2022, 5:30 AMjavascript
Session.init({
override: {
functions: (originalImplementation) => {
return sessionsOverride(originalImplementation);
},
},
}),
rp_st
08/17/2022, 5:31 AMts
import UserRoles from "supertokens-node/recipe/userroles";
import { User } from "../models";
const signInUpOverride = (originalImplementation: any) => {
return {
...originalImplementation,
thirdPartySignInUpPOST: async function (input: any) {
if (originalImplementation.thirdPartySignInUpPOST === undefined) {
throw Error("Should never come here");
}
let response = await originalImplementation.thirdPartySignInUpPOST(input);
if (response.status === "OK") {
if (response.createdNewUser) {
await UserRoles.addRoleToUser(response.user.id, "pending");
await response.session.updateAccessTokenPayload({
...response.session.getAccessTokenPayload(),
role: "pending"
});
} else {
const user = await User.findOne({
userId: response.user.id,
});
if (user) {
user.logins = [...user.logins, new Date()];
await user.save();
}
}
}
return response;
},
};
};
export default signInUpOverride;
rp_st
08/17/2022, 5:31 AMawait response.session.updateAccessTokenPayload({
...response.session.getAccessTokenPayload(),
role: "pending"
});
killian.s
08/17/2022, 5:31 AMrp_st
08/17/2022, 5:32 AMresponse.status === "OK"
if statement (at the end of it)rp_st
08/17/2022, 5:32 AMkillian.s
08/17/2022, 5:35 AMrp_st
08/17/2022, 5:36 AMif (response.status === "OK") {
blockkillian.s
08/17/2022, 5:36 AMkillian.s
08/17/2022, 5:38 AMrp_st
08/17/2022, 5:38 AMupdateAccessTokenPayload
killian.s
08/17/2022, 5:40 AMrp_st
08/17/2022, 5:41 AMrp_st
08/17/2022, 5:41 AMkillian.s
08/17/2022, 5:42 AMkillian.s
08/17/2022, 5:43 AMjavascript
import UserRoles from "supertokens-node/recipe/userroles";
import { User } from "../models";
const signInUpOverride = (originalImplementation: any) => {
return {
...originalImplementation,
thirdPartySignInUpPOST: async function (input: any) {
if (originalImplementation.thirdPartySignInUpPOST === undefined) {
throw Error("Should never come here");
}
let response = await originalImplementation.thirdPartySignInUpPOST(input);
if (response.status === "OK") {
if (response.createdNewUser) {
await UserRoles.addRoleToUser(response.user.id, "pending");
console.log("Pre");
await response.session.updateAccessTokenPayload({
...response.session.getAccessTokenPayload(),
role: "pending",
});
console.log("After");
} else {
const user = await User.findOne({
userId: response.user.id,
});
if (user) {
user.logins = [...user.logins, new Date()];
await user.save();
}
}
response.status === "OK";
}
return response;
},
};
};
export default signInUpOverride;
rp_st
08/17/2022, 5:44 AMupdateAccessTokenPayload
only when createdNewUser
is true. You want to call that even when it's false.killian.s
08/17/2022, 5:45 AMkillian.s
08/17/2022, 5:45 AMrp_st
08/17/2022, 5:46 AMkillian.s
08/17/2022, 5:47 AMjavascript
import UserRoles from "supertokens-node/recipe/userroles";
const sessionsOverride = (originalImplementation: any) => {
return {
...originalImplementation,
createNewSession: async function (input: {
userId: any;
accessTokenPayload: any;
}) {
let userId = input.userId;
let roles = await UserRoles.getRolesForUser(userId);
input.accessTokenPayload = {
...input.accessTokenPayload,
roles,
};
return originalImplementation.createNewSession(input);
},
};
};
export default sessionsOverride;
rp_st
08/17/2022, 5:47 AMkillian.s
08/17/2022, 5:48 AMrp_st
08/17/2022, 5:48 AMrole
rp_st
08/17/2022, 5:48 AMcreateNewSession
, you add roles
rp_st
08/17/2022, 5:48 AMkillian.s
08/17/2022, 5:50 AMrp_st
08/17/2022, 5:51 AMupdateAccessTokenPayload
function?killian.s
08/17/2022, 5:53 AMkillian.s
08/17/2022, 5:53 AMjavascript
const output = await response.session.updateAccessTokenPayload({
...response.session.getAccessTokenPayload(),
role: "pending",
});
console.log(output);
rp_st
08/17/2022, 5:54 AMconsole.log(response.session.getAccessTokenPayload())
rp_st
08/17/2022, 5:54 AMrp_st
08/17/2022, 5:54 AMupdateAccessTokenPayload
returns void.killian.s
08/17/2022, 5:54 AMrp_st
08/17/2022, 5:54 AMkillian.s
08/17/2022, 5:57 AMkillian.s
08/17/2022, 5:57 AMkillian.s
08/17/2022, 5:57 AMkillian.s
08/17/2022, 5:58 AMjavascript
const roles: any = (await SuperTokens.getAccessTokenPayloadSecurely())[
"roles"
];
console.log(roles);
That is how I am getting the roles from the frontendrp_st
08/17/2022, 6:00 AMrp_st
08/17/2022, 6:00 AMrp_st
08/17/2022, 6:01 AMrole
vs roles
rp_st
08/17/2022, 6:01 AMkillian.s
08/17/2022, 6:02 AMkillian.s
08/17/2022, 6:05 AMrp_st
08/17/2022, 6:33 AM