【问题标题】:LocalStorage , cookies does NOT work. neither a 500 status or undefinedLocalStorage ,cookie 不起作用。既不是 500 状态也不是未定义
【发布时间】: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


【解决方案1】:

问题已解决。 原来我试图从authenticate.js 制作一个req.cookies.authorization

var authenticate = function(req, res, next){
  var token = req.cookies.authorization;
  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();
  });
}

当我使用userLogin 功能登录但当我在登录后尝试执行与应用程序相关的任何事情时,我没有通过res.cookies.authorization 发送相同的令牌 导致authenticate.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 Data.generateAuthToken();
  }).then(function(token){
      res.cookie('authorization', token).send({Data}); // this part was missing
      console.log('token', token);
    }).catch(function(e){
    res.send(e)
  });
}
app.post('/', authenticate, listPost);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2013-12-20
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多