- 我有一个 NextJS 页面,我尝试在其中实现 Next-Auth。
- 我使用凭据登录到我的 Rails API。
- 我的 API 正在返回(已经)一个 JWT-Token。(所以 NextAuth 不能创建它)
在这种情况下如何实施Provider.Credentials
for [...nextauth].js
?
流程图”
Next request ---> Next API (with Next-Auth) ---> Rails API (returning Token)
目前我有这些options
:
providers: [
CredentialsProvider({
name: 'Email',
credentials: {
email: { label: "Email", type: "email", placeholder: "meine.email@domain.com" },
password: { label: "Passwort", type: "password" }
},
async authorize(credentials) {
// The 'url' is pointing to a Rails API endpoint which returns a JWT Token
const url = `${process.env.NEXT_PUBLIC_API_URL}/auth/login`;
const res = await fetch(url, {
method: 'POST',
body: JSON.stringify(credentials),
headers: {
"Content-Type": "application/json" }
})
const user = await res.json()
// If no error and we have user data, return it
if (res.ok && user) {
// I SAW EXAMPLES RETURNING {"email": "blah@tst.com"}
return user // MY CONTENT {token: 'eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo0LCJyb2xl…0.OAGiwjj9O_NsH02lIjA2D4HYZkmTQ3_SqtKcVgaIul0'}
}
// Return null if user data could not be retrieved
return null
}
})
]
}
在浏览器中设置了 session_token,但该内容是我没有设置的(随机的?)。如果不是来自我的令牌,这些内容来自哪里?
我的 Rails API 令牌内容:
{
"user_id": 4,
"roles": [
"user"
],
"exp": 1631096219
}
Next-Auth API 令牌内容:
{
"iat": 1631009819,
"exp": 1633601819
}
我是否必须解码我的 API 令牌并在 Provider.Credentials 函数中重新组合?
我实施 Next-Auth 以提供更多的身份验证,如 Twitter 和 Co,但也使用“useSession”而不是构建我自己的所有东西(不会重新发明轮子)。