如何将令牌值存储到我的本地javascript文件中

时间:2017-07-09 18:36:51

标签: javascript node.js express passport.js

您是Nodejs的初学者我已经使用了基于passportjs令牌的身份验证,如果用户登录它为每个用户提供一个令牌,我想根据具有令牌值的用户执行某些操作,例如,如果用户想要查看注册用户列表,如果他有令牌值,他们可以查看它。现在它在Postman中完美地提供了令牌值,但我不知道如何将它存储在变量中并通过FRONT-END调用它。我想通过前端来做(如果他点击获取用户按钮)它应该显示用户列表。我已经在POSTMAN中完成了它很好地工作我不知道如何通过前端做到这一点。 我的用户代码(登录/退出)

var express = require('express');
var router = express.Router();
var User = require('../models/user');
var passport = require('passport');
var Verify    = require('./verify');
/* GET users listing. */
router.route('/')
.get(Verify.verifyOrdinaryUser, function(req, res, next) {
    User.find({}, function (err, users) {
            if (err) throw err;
            res.json(users);
        });
});
router.post('/register', function(req, res, next) {
    User.register(new User({ username : req.body.username }),req.body.password, function(err, user) {
        if (err) {
            return res.status(500).json({err: err});
        }
        user.save(function(err,user) {
            passport.authenticate('local')(req, res, function () {
                return res.status(200).json({status: 'Registration Successful!'});
            });
        });
    });
});
router.post('/login', function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err) {
            return next(err);
        }
        if (!user) {
            return res.status(401).json({
                err: info
            });
        }
        req.logIn(user, function(err) {
            if (err) {
                return res.status(500).json({
                    err: 'Could not log in user'
                });
            }
            var token = Verify.getToken(user);
            res.status(200).json({
                status: 'Login successful!',
                success: true,
                token: token
            });
        });
    })(req,res,next);
});
router.get('/logout', function(req, res) {
        req.logout();
    res.status(200).json({
        status: 'Bye!'
    });
});
module.exports = router;

Main.js文件。在这个main.js文件中,我想在这个get方法中发送那个令牌吗?

$(".get-users-button").click(function() {
  $.ajax({
      method: "GET",
      url: " http://localhost:3000/users"
    })
    .done(function(msg) {
      console.log(msg);
      template(msg);
    });
});

2 个答案:

答案 0 :(得分:0)

根据Passport的documentation

  

如果身份验证成功,将调用下一个处理程序,并将 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>属性设置为经过身份验证的用户。

现在,如果我正确理解您的问题,您希望传递您从中获得的var update = context.Database.SqlQuery<Int32>(sql).FirstOrDefault<Int32>(); 值:

req.user

到您的前端可以执行某些操作的视图。您可以使用以下中间件将变量传递给视图:

token

有关详细信息,请参阅res.locals的文档。

使用示例:

var token = Verify.getToken(user)

app.use((req, res, next) => {
  res.locals.token = Verify.getToken(req.user)
  next()
}

app.js

const express = require('express')
const app = express()

app.set('view engine', 'pug')

app.use((req, res, next) => {
  res.locals.text = 'asdf'
  res.locals.token = 'abc'
  next()
})

app.get('/', (req, res) => {
  res.render('index')
})

app.listen(3000, () => {
  console.log('listening on 3000')
})

答案 1 :(得分:0)

当您从POST返回到/ login端点的成功响应时,将令牌存储在客户端(例如,window.localStorage.setItem('<your-namespace>-user-token', <the token goes here>);

然后,当用户点击“获取用户按钮”时,将令牌从存储中取出(例如window.localStorage.getItem('<your-namespace>-user-token');,并根据需要将其存储在变量中。

然后,根据您要求获取用户的请求,将{ 'x-access-token': <token variable goes here> }添加到您的请求标题中。