您是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);
});
});
答案 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> }
添加到您的请求标题中。