首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用$window.localStorage的Express-jwt抛出SyntaxError

使用$window.localStorage的Express-jwt抛出SyntaxError
EN

Stack Overflow用户
提问于 2014-08-19 15:38:10
回答 1查看 798关注 0票数 0

我正在学习本教程:https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/

当从前端向/restricted发出http请求时,我在cmd中得到以下错误:

代码语言:javascript
复制
SyntaxError: Unexpected token m
at Object.parse (native)
at Object.jwsDecode [as decode]

诸若此类。

我将展示我的代码的简化版本。

NodeJS:

登录函数,使用令牌进行响应:

代码语言:javascript
复制
app.post('/login', function (req, res) { 
    var token = jwt.sign(email, secret, expires);
    res.json({ token: token });
});

限制访问的设置等。

代码语言:javascript
复制
var application_root = __dirname,
express = require("express"),
expressJwt = require('express-jwt'),
jwt = require('jsonwebtoken');

var app = express();

app.use(express.json());
app.use(express.urlencoded());

var secret = '9mDj34SNv86ud9Ns';

// We are going to protect /api routes with JWT
app.use('/restricted', expressJwt({secret: secret}));

app.get('/restricted', function (req, res) { console.log('fuck'); });

AngularJS:

请求拦截器:

代码语言:javascript
复制
app.factory('httpRequestInterceptor', function ($rootScope, $q, $window) {
    return {
        request: function (config) {
            config.headers = config.headers || {};
            if ($window.localStorage.token) {
                config.headers.Authorization = 'Bearer ' + $window.localStorage.token;
                console.log('Bearer ' + $window.localStorage.token);
            }
            return config;
        },
        response: function (response) {
            if (response.status === 401) {
                // handle the case where the user is not authenticated
            }
            return response || $q.when(response);
        }
    };
});

用于推动拦截器的配置:

代码语言:javascript
复制
$httpProvider.interceptors.push('httpRequestInterceptor');

对/restricted的请求:

代码语言:javascript
复制
        $http({url: '/restricted', method: 'GET'})
            .success(function (data, status, headers, config) {
                console.log(data.name); // Should log 'foo'
            });

我的代码和教程代码之间唯一明显的区别是我使用的是localStorage而不是sessionStorage。

EN

回答 1

Stack Overflow用户

发布于 2014-08-19 18:58:33

我问,我回答。

在创建此行的令牌时:

代码语言:javascript
复制
var token = jwt.sign(email, secret, expires);

我用电子邮件,这只是一个常规变量。

代码语言:javascript
复制
var email = req.body.email;

但是,expressJwt需要一个JSON:

代码语言:javascript
复制
var profile = {
    first_name: 'John',
    last_name: 'Doe',
    email: 'john@doe.com',
    id: 123
};

我不知道这会是个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25387529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档