带有反应的 FIrebase 登录
Posted
技术标签:
【中文标题】带有反应的 FIrebase 登录【英文标题】:FIrebase login with react 【发布时间】:2020-05-31 06:40:16 【问题描述】:我正在尝试在 firebase 的帮助下获取授权令牌。我正在使用邮递员来获取请求。我成功编写了注册路由并且工作正常,但我不确定登录路由为什么不起作用。
这是我的登录路径代码
app.post('/login', (req, res) =>
const user =
email: req.body.email,
password: req.body.password
;
let errors = ;
if(isEmpty(user.email)) errors.email = 'Must not be empty'
if(isEmpty(user.password)) errors.password = 'Must not be empty'
if(Objects.keys(errors).length > 0) return res.status(400).json(errors);
firebase.auth().signInWithEmailAndPassword(user.email, user.password)
.then(data =>
return data.user.getIdToken();
)
.then(token =>
return res.json(token);
)
.catch(err =>
console.error(err);
if (err.code === 'auth/wrong-password')
return res
.status(403).json(general: 'Wrong Credentials, please try again')
return res.status(500).json(error: err.code)
)
)
这是我的注册路径代码
app.post('/signup', ( req, res ) =>
// Users credentails
const newUser =
email: req.body.email,
password: req.body.password,
confirmPassword: req.body.confirmPassword,
handle: req.body.handle,
;
let errors = ; // this is used to check if there will be any errors
// checks errors in email address
if(isEmpty(newUser.email))
errors.email = 'Must not be empty'
else if (!isEmail(newUser.email))
errors.email = 'Must be a valid email address'
// checks errors in password and confirmPassword
if(isEmpty(newUser.password)) errors.password = 'Must not be empty'
if(newUser.password !== newUser.confirmPassword) errors.confirmPassword = 'Passwords do not match'
if(isEmpty(newUser.handle)) errors.handle = 'Must not be empty'
// Return 400 error if there are any errors present
if(Object.keys(errors).length > 0) return res.status(400).json(errors)
// TODO validate data
let token, userId;
db.doc(`users/$newUser.handle`).get()
.then( doc =>
if(doc.exists)
return res.status(400).json( handle: 'this handle is already taken' )
else
return firebase.auth().createUserWithEmailAndPassword(newUser.email, newUser.password)
)
.then(data =>
userId = data.user.uid;
return data.user.getIdToken()
)
.then(idtoken =>
token = idtoken;
const userCredentials =
handle: newUser.handle,
email: newUser.email,
createdAt: new Date().toISOString(),
userId
;
return db.doc(`users/$newUser.handle`).set(userCredentials);
)
.then(() =>
return res.status(201).json( token )
)
.catch(err =>
console.error(err);
if(err.code === 'auth/email-already-in-use')
return res.status(400).json( email: 'Email is already in use')
else
return res.status(500).json( error: err.code )
);
);
我已经检查了 firebase 上电子邮件的授权。我得到了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Internal Server Error</pre>
</body>
</html>
``` of error code 500(internal server error) on postman.
【问题讨论】:
登录路径中console.error(err);
的输出是什么?并添加带有请求参数和结果的邮递员屏幕截图
您是否尝试从服务器端进行身份验证? signInWithEmailAndPassword
应该用在前端。
【参考方案1】:
参加相同的课程并遇到相同的问题。我发现只有当我保存和使用$ firebase serve
时才会出现问题
当我通过$ firebase deploy
尝试时,我没有遇到任何问题。
【讨论】:
以上是关于带有反应的 FIrebase 登录的主要内容,如果未能解决你的问题,请参考以下文章
如何在反应项目和 Firebase 中使用带有 axios 的删除请求?
您如何使用面部 ID 登录以使用 Firebase 做出本机反应?
错误:verifier._reset 不是函数。尝试使用 Firebase 使用手机登录时,反应原生和 Expo
React Hooks + Firebase Firestore onSnapshot - 正确使用带有反应钩子的 Firestore 监听器