【发布时间】:2018-02-09 21:26:03
【问题描述】:
我尝试了一切来存储令牌。没有任何效果。 我尝试过的东西:Cookie、标头、localStorage。 基本上没有在 authenticate.js 中定义,所以我得到了 401。 我做错了什么?
在 app.js 中
{authenticate} = require('./public/middleware/authenticate');
// POST /users/login {email, password}
function userLogin(req, res){
var body = _.pick(req.body, ["email", "password"]);
User.findByCredentials(body.email, body.password).then(function(user){
return user.generateAuthToken().then(function(token){
// res.cookie('authorization', token).send(user);
res.setHeader('set-cookie',token).send(user);
// localStorage.setItem('token',token');
// res.header('x-auth',token).send(user);
console.log('APP.JS', token);
});
}).catch(function(e){
res.status(400).send();
});
}
app.post('/users/login', userLogin);
在 Authenticate.js 中
const {User} = require('.././models/users-Model');
const cookieParser = require('cookie-parser');
const express = require('express');
const requestCookies = require('request-cookies');
var app = express();
app.use(cookieParser());
var authenticate = function(req, res, next){
// var token = req.cookie.authorization;
// var token = req.header('x-auth');
var token = req.header('set-cookie');
// var token = Cookie('auth');
// var token = localStorage.getItem("token");
console.log('authenticate.js',token);
User.findByToken(token).then(function(user){
if(!user){
return Promise.reject();
}
req.user = user;
req.token = token;
next();
}).catch(function(e){
res.status(401).send();
});
}
module.exports = {authenticate};
在 app.js 中
function listPost(req, res){
var Data = new budgetCalculator({
_creator:req.user._id,
_id: req.body._id,
firstItem: req.body.firstItem,
firstPrice: req.body.firstPrice,
secondItem: req.body.secondItem,
secondPrice: req.body.secondPrice,
thirdItem: req.body.thirdItem,
thirdPrice: req.body.thirdPrice,
tBudget: req.body.tBudget
});
Data.save().then(function(Data){
return user.generateAuthToken().then(function(token){
res.header('x-auth',token).send({Data});
});
console.log('token', token);
}).catch(function(e){
res.send(e)
});
}
app.post('/', authenticate, listPost);
在users schema file
// generating the token
// which i use to pass the token
UserSchema.methods.generateAuthToken = function () {
var user = this;
var access = 'auth';
var token = jwt.sign({_id: user._id.toHexString(), access}, 'abc123').toString();
user.tokens.push({access, token});
return user.save().then(function(){
return token;
});
};
它暴露并连接到其他文件。我想我只需要在listPost 函数被触发时再次传递令牌。因此,当authenticate.js 生成req.header('x-auth) 时,它会从generateAuthToken() 接收相同的令牌。
但我试过它返回undefined。
【问题讨论】:
-
这两段代码是服务器端的吗?如果是,似乎
userLogin向客户端发送了一个令牌,它应该在authenticate标头的请求中设置它,对吧? -
两者都是服务器端。我还没有使用角度或任何东西。我不明白你的评论?所有注释的代码都不起作用。既不是 401 也不是令牌的未定义值。你能澄清更多吗?
-
我会试试的。因此,如果有两个服务器端,则某些请求
userLogin会响应user对象。此响应包含令牌作为标头。然后,您获取用户,并尝试进行身份验证,请求authenticate并在标头中传递从先前响应的标头中获取的令牌。 -
@Striped 这正是我想要做的!每次我尝试请求它时,问题都是未定义的。既没有将其设置为 cookie 也没有将其设置为标头,它只是未定义..
标签: javascript node.js cookies header local-storage