backend/src/extensions/users-permissions/services/magic-link.ts (view raw)
1import jwt from "jsonwebtoken";
2
3const MAGICLINK_SECRET = process.env.MAGICLINK_SECRET;
4
5export const generateMagicToken = async (email: string, lang: string) => {
6 const existingUser = await strapi.db
7 .query("plugin::users-permissions.user")
8 .findOne({
9 where: { email },
10 });
11
12 if (existingUser?.provider === "google") {
13 strapi.log.warn(
14 `User ${email} is linked to Google account. Can't login with magic link.`
15 );
16 throw new Error("GoogleAccount");
17 }
18 if (!MAGICLINK_SECRET) throw new Error("No MAGICLINK_SECRET provided");
19
20 return jwt.sign({ email, lang }, MAGICLINK_SECRET, { expiresIn: "20m" });
21};
22
23export const verifyMagicToken = (token: string) =>
24 jwt.verify(token, MAGICLINK_SECRET);