NodeJS用户身份验证

时间:2018-03-16 16:45:54

标签: node.js express jwt

我陷入了NodeJs的某个角落。我会一步一步地解释我的系统。

  1. 用户注册到系统
  2. 后端创建JWT令牌并将其发送给用户
  3. 用户将jwt令牌存储在本地存储

  4. 我想在用户登录时访问/个人资料页面。

  5. 用户点击将http帖子发送到/ api / profile
  6. 的按钮
  7. 我们的http请求已发送到/ api / profile。路由器和授权部分在
  8. 下面
  9. 如果用户通过了此授权步骤。我的/ api / profile函数返回res.json({success:true})
  10. 我使用response.data.success === true检查http响应值。如果为true,则将用户发送到/ profile页面。如果没有,请将用户发送到/登录页面。
  11. 以下是问题

    如果用户输入/ profile到url bar,用户可以直接转到该页面,因为由于缺少http.post请求而没有授权控制。

    如何在登录时检查用户是否输入了/个人资料?

    我的职能如下。

    HTTP POST

    var profile = function () {
        var token = $window.localStorage.getItem('jwt')
        return $http.post('/api/profile',  {'token': token}).then(function (response) {
            if(response.data.success === true){
                    $window.location.href = "/profile";
            }else{
                    $window.location.href = "/login";
            }
        });
    }
    

    PROFILE PAGE

    exports.profilePage = function (req, res) {
        categoryModel.find(function (err, allCategories) { //NOT TO LOSE MENS OR WOMENS FROM NAVBAR !
            res.render('profile', {
                allCategories: allCategories
            })   
        });
    }
    

    / API / PROFILE

    exports.profile = function (req, res) {
        res.json({
            success: true
        })
    }
    

    ROUTER

    const userController = require('../controllers/userController')
    app.get('/profile', userController.profilePage);
    app.post('/api/profile', userController.authenticate, userController.profile);  //AUTHORIZATION REQUIRED
    

    AUTHORIZATION

    exports.authenticate = function (req, res, next) {
        var token = req.body.token
        if (token != null) { //To know that user logged in
            var user = userDBModel.User().methods.verifyJWT(token)
            if (user) {
                return next()
            } else {
                return res.json({
                    success: false
                })
            }
        } else {
            return res.json({
                success: false
            })
        }
    }
    

1 个答案:

答案 0 :(得分:0)

在这个实例中,connect-ensure-login包可以为你工作吗?如果找不到令牌,我会使用JWT / Express重定向到登录。

https://github.com/jaredhanson/connect-ensure-login