Javascript 如何在GET方法中检查用户身份验证?

Javascript 如何在GET方法中检查用户身份验证?,javascript,node.js,reactjs,express,Javascript,Node.js,Reactjs,Express,我的前端是Reactjs,后端是带有Postgresql数据库的Nodejs和expressjs。 我有一个简单的登录页面,用于检查数据库中的用户身份验证。 在我的Reactjs应用程序中,在登录后,用户上传文件,然后在我的NodeJ上有一个GET方法,当用户想要从服务器获取文件时,它会发送files res.sendFile。这只是一个简单的问题 <img alt='none' src=`http://example.com/source/${filename}` /> /con

我的前端是Reactjs,后端是带有Postgresql数据库的Nodejs和expressjs。 我有一个简单的登录页面,用于检查数据库中的用户身份验证。 在我的Reactjs应用程序中,在登录后,用户上传文件,然后在我的NodeJ上有一个GET方法,当用户想要从服务器获取文件时,它会发送files res.sendFile。这只是一个简单的问题

<img alt='none' src=`http://example.com/source/${filename}` />
/controllers/signin.js

const handleSignin = (req, res, db, bcrypt) => {
const { email, password } = req.body;
if (!email || !password ) {
    return res.status(400).json('Incorrect form submission');
}
db.select('email', 'hash').from('login')
.where('email', '=', email)
.then(data => {
    const isValid = bcrypt.compareSync(password, data[0].hash);
if (isValid) {
        return db.select('*').from('users')
        .where('email', '=', email)
        .then(user => {
            res.json(user[0])
        })
        .catch(err => res.status(400).json('unable to get user'))
    } else {
        res.status(400).json('wrong credentials' )
    }
})
.catch(err => res.status(400).json('wrong credentials'))
}

module.exports = {
handleSignin: handleSignin
}

您必须通过cookie或会话实现身份验证机制。成功登录后,您将在浏览器中设置cookie,并且在每个HTTP req上,您将有权访问cookie数据

创建一个中间件函数,该函数将检查每个API请求的req对象中的有效cookie数据

如果用户未登录并尝试访问URL,您将不会在cookie中收到数据,并且您可以访问该特定资源

// On valid credentials, you can set the cookie like this
  res.cookie(cookieName, cookieData, cookieOptions);
中间件的功能可以是这样的

function checkSession(req, res, next) {
  if(!req.cookies || !Object.keys(req.cookies).length){
    res.sendStatus(401)
  }
  else next();
}

您可以在此处找到有关如何使用的更多详细信息。

这是否意味着我不需要在我的前端上设置任何内容?不,如果express middleware功能未经授权访问,您的API将响应401,因此,资源将不受公共访问的保护。那些拥有有效凭据并登录到浏览器的用户将拥有有效的cookie数据,并且这些用户将被允许访问资源
function checkSession(req, res, next) {
  if(!req.cookies || !Object.keys(req.cookies).length){
    res.sendStatus(401)
  }
  else next();
}