使用自定义凭据提供程序进行 NextAuth 不创建会话 [英] NextAuth with custom Credential Provider Not creating session

查看:45
本文介绍了使用自定义凭据提供程序进行 NextAuth 不创建会话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的 NextJs 应用中实现 NextAuth.我正在关注官方文档.但出于某种原因或其他原因,似乎登录时未生成用户会话对象.

I am attempting to implement NextAuth in my NextJs app. I am following the official documentation. But for one reason or the other, it seems like the user session object is not generated on login.

这是我的 pages/api/auth/[...nextauth].js 文件中的代码

Here is my code from my pages/api/auth/[...nextauth].js file

import NextAuth from "next-auth";
import Providers from "next-auth/providers";
import axios from "axios";


export default (req, res) =>
    NextAuth(req, res, {
        providers: [
            Providers.Credentials({
                id: 'app-login',
                name: APP
                authorize: async (credentials) => {
                    console.log("credentials_:", credentials);
                    try {
                        const data = {
                            username: credentials.username,
                            password: credentials.password

                        }
                        // API call associated with authentification
                         // look up the user from the credentials supplied
                        const user = await login(data);
                        if (user) {
                            // Any object returned will be saved in `user` property of the JWT
                            return Promise.resolve(user);
                          }
                     
                    } catch (error) {
                        if (error.response) {

                            console.log(error.response);
                            Promise.reject(new Error('Invalid Username  and Password combination'));
                        }
                    }

                    

                },
               
            }),
        ],
        site: process.env.NEXTAUTH_URL || "http://localhost:3000",
        session: {
            // Use JSON Web Tokens for session instead of database sessions.
            // This option can be used with or without a database for users/accounts.
            // Note: `jwt` is automatically set to `true` if no database is specified.
            jwt: true, 
            
            // Seconds - How long until an idle session expires and is no longer valid.
            maxAge: 1 * 3 * 60 * 60, // 3 hrs
            
            // Seconds - Throttle how frequently to write to database to extend a session.
            // Use it to limit write operations. Set to 0 to always update the database.
            // Note: This option is ignored if using JSON Web Tokens 
            updateAge: 24 * 60 * 60, // 24 hours
          },
          callbacks: { 
            // signIn: async (user, account, profile) => { return Promise.resolve(true) },
            // redirect: async (url, baseUrl) => { return Promise.resolve(baseUrl) },
            // session: async (session, user) => { return Promise.resolve(session) },
            // jwt: async (token, user, account, profile, isNewUser) => { return Promise.resolve(token) }
          },
        pages: {
            signIn: '/auth/credentials-signin',
            signOut: '/auth/credentials-signin?logout=true',
            error: '/auth/credentials-signin', // Error code passed in query string as ?error=
            newUser:'/'
          },

        debug: process.env.NODE_ENV === "development",
        secret: process.env.NEXT_PUBLIC_AUTH_SECRET,
        jwt: {
            secret: process.env.NEXT_PUBLIC_JWT_SECRET,
        }
    });






const login = async data => {
    var config = {
        headers: {
            'Content-Type': "application/json; charset=utf-8",
            'corsOrigin': '*',
            "Access-Control-Allow-Origin": "*"
        }
    };
    const url = remote_user_url;
    const result = await axios.post(url, data, config);
    console.log('result', result);
    return result;
};

我在这里有什么不明白的地方?感谢您的帮助.

What am I not getting it right here? Thanks for the help.

推荐答案

我最终设法解决了这个问题.由于为自定义凭据提供程序指定了id"和name"选项,出现错误

I managed to resolve the issue eventually. Something was wrong due to specifying the 'id' and 'name' options for the custom credential provider

我已经删除了它们,代码现在可以运行了.

I have removed them and the code is working now.

这篇关于使用自定义凭据提供程序进行 NextAuth 不创建会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆