带有反应的 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 做出本机反应?

反应原生 Firebase 不保留用户信息

错误:verifier._reset 不是函数。尝试使用 Firebase 使用手机登录时,反应原生和 Expo

带有苹果登录的 Firebase 身份验证网络

React Hooks + Firebase Firestore onSnapshot - 正确使用带有反应钩子的 Firestore 监听器