我使用next-auth.js库为 Next.js 我的应用程序创建身份验证系统。在我的本地计算机上一切正常,但在将网站部署到Vercel后,我的登录功能不起作用。
登录页面(/pages/signin)
加载正常,我提交凭据并收到如下错误:
https://projectname-git-branch.username.now.sh/api/auth/error?error=Error%3A%20connect%20ECONNREFUSED%20127.0.0.1%3A80
。
我发现许多文章错误即将错误baseURL
配置axios
,但我axios
在代码中到处都有很多请求(例如,我在应用程序加载后从 firebase 获取数据)并且它可以正常工作。
我控制台记录了我设置baseURL
属性的环境变量,axios
这很好。
// _app.js
import axios from 'axios';
axios.defaults.baseURL = process.env.FIREBASE_APIURL;
console.log('axios-baseurl', axios.defaults.baseURL) // it prints right url
我在那里写的关于这个问题的更多信息:#846
我真的不知道该怎么办。我没有得到关于这个错误发生在哪里、哪个文件和行号、我的代码中有什么请求的任何信息。
下面我把我的整个[...nextauth.js]
文件和登录表格。也许我应该在那里更好地配置一些东西。
// [...nextauth.js]
import NextAuth from 'next-auth'
import Providers from 'next-auth/providers'
import axios from 'axios';
axios.defaults.baseURL = process.env.FIREBASE_APIURL;
console.log('axios-baseurl', axios.defaults.baseURL)
const sha1 = require('crypto-js/sha1');
const md5 = require('crypto-js/md5');
export default (req, res) =>
NextAuth(req, res, {
providers: [
Providers.Credentials({
name: 'Credentials',
credentials: {
phone: { label: "Numer telefonu", type: "text" },
password: { label: "Haslo", type: "password" }
},
authorize: async (loginData) => {
const { csrfToken, phone, password } = loginData;
// checking if there is account with these credentials
let res = await login({
phone,
password: sha1(md5(password)).toString()
})
// 200 = OK
if(res.status == 200){
// check if account was activated
if(res.data.info.activated == "true"){
// collect account data
const user = {
phone,
...res.data.info
}
return Promise.resolve(user);
}
else{
// account is not activated by sms code
return Promise.reject(new Error("AccountNotActivated"));
}
}
else {
// wrong credentials
return Promise.reject(new Error("WrongCredentials"));
}
}
})
],
callbacks: {
jwt: async (token, user, account, profile, isNewUser) => {
user && (token.user = user);
return Promise.resolve(token)
},
session: async (session, user, sessionToken) => {
session.user = user.user;
return Promise.resolve(session)
}
},
pages: {
signIn: '/signin'
},
site: process.env.NEXTAUTH_URL || "localhost:3000",
debug: true
})
// function which sends login request to rest api and returns result
// https://stackoverflow.com/q/64244115
const login = async data => await axios.post('/checkCredentials', data);
<!-- /pages/signin.js -->
<form action="/api/auth/callback/credentials" method="post">
<input name='csrfToken' type='hidden' defaultValue={csrfToken} />
<label>
Numer telefonu: <br />
<input name='phone' type='text' required autoComplete='off' />
</label>
<br />
<label>
Hasło: <br />
<input name='password' type='password' required autoComplete='off' />
</label>
<br />
<br />
<input type="submit" value="Zaloguj" />
</form>