我试图在那里有自己的文字和风格。在文档(https://next-auth.js.org/configuration/options#pagesverifyRequest: '/auth/verify-request' )中,它说我们可以通过添加但没有示例来添加自定义页面
我尝试使用此代码创建自定义 verify-request.js 文件https://github.com/nextauthjs/next-auth/blob/1838e43b275fa36b1eb7bd046eead6795cfd0f2d/src/server/pages/verify-request.js但它不适用于我...
有一个示例或教程如何做到这一点吗?我尽我所能地搜索了一切,但一无所获。
我按照本教程设置https本地开发机器:https://dev.to/nakib/using-https-on-next-js-local-development-server-bcd
这是我使用的代码:
const { createServer } = require("https");
const { parse } = require("url");
const next = require("next");
const fs = require("fs");
const port = 3000;
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();
const httpsOptions = {
key: fs.readFileSync('/some/path/to/rootCA-key.pem'),
cert: fs.readFileSync('/some/path/to/rootCA.pem')
};
app.prepare().then(() => {
createServer(httpsOptions, (req, res) => {
const parsedUrl = parse(req.url, true);
handle(req, res, parsedUrl);
}).listen(port, (err) => {
if (err) throw err;
console.log("ready - …Run Code Online (Sandbox Code Playgroud) 我现在正在使用 next.js 构建一个前端,它使用 next-auth 通过 GitHub OAuth 进行身份验证。
Next-auth 处理包括会话在内的所有身份验证,并将所有内容保存到数据库中,在我的例子中是 Postgres DB。
我现在还想通过 REST API 将我的前端连接到 Spring Boot 后端服务器,该 API 处理一些文件访问。我可以简单地将会话令牌包含到授权标头中,并将我的后端连接到 Postgres DB,并检查是否存在具有此令牌的会话。
但这种做法似乎并不正确。保护我的后端的最佳方法是什么?我的后端如何检查用户是否使用 GitHub 登录?
我有一个安装了 Next-Auth 的 NextJS 前端和一个使用 Sanctum 的 Laravel 后端当我尝试使用 Next-Auth 的登录功能登录时,它给了我这个错误:
Request failed with status code 419
Run Code Online (Sandbox Code Playgroud)
419 与 CSRF 令牌有关,但我在调用登录方法之前通过调用 sainttum/csrf-cookie 路由来设置令牌
[...nextauth.js]
Request failed with status code 419
Run Code Online (Sandbox Code Playgroud)
apiClient.js
CredentialsProvider
({
name: 'Email and Password',
credentials: {
email: {label: "Email", type: "email", placeholder: "Your Email"},
password: {label: "Password", type: "Password"}
},
async authorize({email, password}, req) {
await apiClient.get("/sanctum/csrf-cookie");
const user = await apiClient.post('/customer/login', {
email: email,
password: password,
});
if (user) {
return user
} else {
return …Run Code Online (Sandbox Code Playgroud) 我使用 Next.js 和 next auth v4 进行凭据身份验证。
我想要做的是在中间件中为我的 API 调用添加全局验证,以便在 API 调用会话之前进行测试。如果会话不为空,则调用必须成功通过,否则如果会话为空,则处理未经授权的错误消息并重定向到登录页面。
我还想为登录页面和其他不需要检查身份验证的页面添加受保护的路由和不受保护的路由。
这是我的代码:
[...nextauth].js
import NextAuth from "next-auth"
import CredentialsProvider from "next-auth/providers/credentials";
import api from './api'
export default NextAuth({
providers: [
CredentialsProvider({
name: "Credentials",
async authorize(credentials, req) {
const {username,password} = credentials
const user = await api.auth({
username,
password,
})
if (user) {
return user
} else {
return null
}
}
})
],
callbacks: {
async jwt({ token, user, account }) {
let success = user?.id > 0 …Run Code Online (Sandbox Code Playgroud) 是否可以允许 next-auth 从 API 返回错误并从客户端传递它们?
例如,如果用户的电子邮件或密码不正确,API 将专门返回。在我们的移动应用程序上,这效果很好。尽管在网站上,我们使用的是 Next-auth。使用文档中的凭据示例,将返回值更改为对象会很棒。
import CredentialsProvider from "next-auth/providers/credentials"
providers: [
CredentialsProvider({
name: "Credentials",
credentials: {
username: { label: "Username", type: "text", placeholder: "jsmith" },
password: { label: "Password", type: "password" }
},
async authorize(credentials, req) {
const user = { id: 1, name: "J Smith", email: "jsmith@example.com" }
if (user) {
// Any object returned will be saved in `user` property of the JWT
return user
} else {
// Return an object that will pass …Run Code Online (Sandbox Code Playgroud) 环境
问题
大家好
我使用 NextAuth 通过凭证提供程序和策略 jwt 进行身份验证,但函数 getToken 在我的中间件中始终返回 null,而 NextAuthOptions 中的 jwt 回调不返回 null
我检查了cookie存储中的令牌并尝试解码令牌,结果解码仍然正确
变量环境 NEXTAUTH_SECRET 已添加到文件 .env.local 中
代码
src/page/api/auth/[...nextauth].ts
export const decode = async (data: any) => {
const { secret, token } = data;
const verify = jwt.verify(token, secret) as JWT;
return verify;
};
export const encode = async (data: any) => {
const { secret, token } = data;
const payload = {
username: token.username,
email: token.email, …Run Code Online (Sandbox Code Playgroud)根据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: …Run Code Online (Sandbox Code Playgroud) 我正在使用 Next.js 和 NextAuth.js 进行亚马逊 cognito 设置,我的问题是,当我在注销后立即单击登录链接时,我的用户会直接登录,而不会要求提供凭据。
我的 [...nextauth].ts 看起来像这样:
import NextAuth from 'next-auth';
import CognitoProvider from 'next-auth/providers/cognito';
export const authOptions = {
providers: [
CognitoProvider({
clientId: process.env.COGNITO_CLIENT_ID || '',
clientSecret: process.env.COGNITO_CLIENT_SECRET || '',
issuer: process.env.COGNITO_ISSUER_URL,
}),
],
debug: process.env.NODE_ENV !== 'production' ? true : false,
};
export default NextAuth(authOptions);
Run Code Online (Sandbox Code Playgroud)
对于身份验证,我使用下一个帮助程序方法登录和退出:
interface HomeProps {
appTitle: string;
}
const Home: NextPage<HomeProps> = ({ appTitle }) => {
const { data: session, status } = useSession();
if (status === 'authenticated') {
return …Run Code Online (Sandbox Code Playgroud) 按照NextAuth.js 文档,我成功地实现了登录 github,这似乎非常简单。
页面/auth/[...nextauth].js
import NextAuth from "next-auth";
import GithubProvider from "next-auth/providers/github";
export const authOptions = {
providers: [
GithubProvider({
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
}),
],
};
export default NextAuth(authOptions);
Run Code Online (Sandbox Code Playgroud)
然后将应用程序包装起来SessionProvider,就可以开始了。
import { SessionProvider } from "next-auth/react";
import { Session } from "next-auth";
import type { AppProps } from "next/app";
import "../styles/globals.css";
export default function App({
Component,
pageProps,
}: AppProps<{
session: Session;
}>) {
return (
<SessionProvider session={pageProps.session}>
<Component {...pageProps} />
</SessionProvider>
);
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用 …
next-auth ×10
next.js ×10
reactjs ×4
javascript ×3
jwt ×2
csrf-token ×1
github ×1
laravel ×1
middleware ×1
node.js ×1
openssl ×1
security ×1
spring-boot ×1