mat*_*tic 6 javascript jwt reactjs next.js next-auth
根据Next Auth 文档,我可以/authorize通过 的第三个参数将其他参数传递到端点signIn()。
他们展示了两个例子:
signIn("identity-server4", null, { prompt: "login" }) // always ask the user to re-authenticate
signIn("auth0", null, { login_hint: "info@example.com" }) // hints the e-mail address to the provider
Run Code Online (Sandbox Code Playgroud)
但是,没有完整的工作示例,我无法读取我在/api/auth/[...nextauth].js. 任何人都可以告诉我如何读取这些附加参数,例如signIn() callback?
这是一个简单的例子来说明我的意思:
/index.jsx
import { useState } from "react"
import { signIn } from "next-auth/react"
export default function EmailLink() {
const [email, setEmail] = useState('')
const submitUser = (e) => {
e.preventDefault()
signIn('email',
{email, callbackUrl: '/dashboard', redirect: false},
{addedParam: "My added parameter"}) // <- MY ADDITIONAL PARAMETER!
}
return (
<form onSubmit={submitUser}>
Email: <input type='email' placeholder="Enter email" value={email} onChange={(e) => setEmail(e.target.value)} />
<button type="submit">Email Link</button>
</form>
)
}
Run Code Online (Sandbox Code Playgroud)
/api/auth/[...nextauth].js
import NextAuth from "next-auth"
import EmailProvider from "next-auth/providers/email"
export default NextAuth({
providers: [
EmailProvider({
server: {
host: process.env.EMAIL_SERVER_HOST,
port: process.env.EMAIL_SERVER_PORT,
auth: {
user: process.env.EMAIL_SERVER_USER,
pass: process.env.EMAIL_SERVER_PASSWORD,
}
},
from: process.env.EMAIL_FROM,
}),
],
callbacks: {
async signIn(user, account, profile, email, credentials) {
const loginProvider = user.account.provider
if (loginProvider === "email") {
console.log("User:", user)
console.log("Account:", account)
console.log("Profile:", profile)
console.log("Email:", email)
console.log("Credentials:", credentials)
return user
}
},
})
Run Code Online (Sandbox Code Playgroud)
回调输出结果signIn():
User: {
user: { email: 'user@domain.com', id: 'user@domain.com' },
account: {
providerAccountId: 'user@domain.com',
userId: 'user@domain.com',
type: 'email',
provider: 'email'
},
email: { verificationRequest: true }
}
Account undefined
Profile undefined
Email undefined
Credentials undefined
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我的附加参数{addedParam: "My added parameter"}没有显示在任何对象中。如何读取这个添加的参数/api/auth/[...nextauth].js?
And*_*dez -2
我很确定addedParam 必须与email 和callbackUrl 位于同一对象中:
const submitUser = async (e) => {
e.preventDefault()
signIn('email', {
email,
callbackUrl: '/dashboard',
redirect: false,
addedParam: "My added parameter"
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2881 次 |
| 最近记录: |