簡體   English   中英

無法使用Auth0 / Angular訪問Node.js服務器中的req.user

[英]Can't access req.user in Node.js server with Auth0/Angular

我正在使用auth0充當管理面板的登錄名,並且運行良好。 我遇到的一個問題是在節點中,由於某種原因,我無法訪問“ req.user”,因為它返回的身份不明。 這是一個非常基本的設置。 我已在控制台上記錄了req.headers並設置了身份驗證標頭。

這是節點app.js文件

    var express = require('express');
    var path = require('path');
    var favicon = require('serve-favicon');
    var logger = require('morgan');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');
    var routes = require('./routes/index');
    var users = require('./routes/users');
    var app = express();
    var Parse = require('node-parse-api').Parse;

    var expressJwt = require('express-jwt');
    var jwt = require('jsonwebtoken');
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');

    // uncomment after placing your favicon in /public
    //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
    app.use(logger('dev'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    app.use('/bower_components',  express.static(__dirname + '/bower_components'));
    app.Parse = new Parse(options.app_id, options.api_key);
    app.use('/api', routes(app), expressJwt({secret: 'Mode'}));
    app.all('/*', function(req, res) {
        res.sendFile('index.html', { root: path.join(__dirname, '/public') });
    });

    module.exports = app;

這是AngularJS代碼。

var app = angular.module('EnragedGamers', ['angularMoment', 'ngRoute', 'auth0', 'angular-storage', 'angular-jwt'])
.config(function(authProvider, $routeProvider, $locationProvider, $httpProvider, jwtInterceptorProvider) {

    $routeProvider
        .when('/', {
            templateUrl: 'home.html',
            controller: 'Home'
        })
        .when('/article/:article_id', {
            templateUrl: 'article.html',
            controller: 'Article'
        })
        .when('/admin-panel/login', {
            templateUrl: 'admin-login.html',
            controller: 'Admin-Login'
        })
        .when('/admin-panel', {
            templateUrl: 'admin.html',
            controller: 'Admin',
            requiresLogin: true
        });

    authProvider.init({
        domain: 'enragedgamers.auth0.com',
        clientID: 'MpTkAl4eosjl3SB682ZGSSrJYi03QiZp',
        loginUrl: '/admin-panel/login'
    });

    jwtInterceptorProvider.tokenGetter = ['store', function(store) {
        // Return the saved token
        return store.get('token');
    }];

    $httpProvider.interceptors.push('jwtInterceptor');

    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    });

})
.run(function($rootScope, auth, store, jwtHelper, $location) {
    // This hooks al auth events to check everything as soon as the app starts
    $rootScope.$on('$locationChangeStart', function() {
        var token = store.get('token');
        if (token) {
          if (!jwtHelper.isTokenExpired(token)) {
            if (!auth.isAuthenticated) {
              auth.authenticate(store.get('profile'), token);
            }
          } else {
            // Either show the login page or use the refresh token to get a new idToken
            $location.path('/');
          }
        }
    });
});

這是路線文件代碼

var express = require('express');
var router = express.Router();
module.exports = function(app){

    router.get('/admin/hello', function(req, res){
        console.log(req.user)
        res.status(201).json({'human': 'Hello'})
        console.log(req.body);
    });

    return router;
} 

似乎您在節點側和中間人上缺少用於實際身份驗證的秘密。

參見https://github.com/auth0/express-jwt

var jwt = require('express-jwt');

app.use(jwt({ secret: 'your secret key here'}));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM