【问题标题】:Angularjs, Expressjs and passportjs for authentication checks on server sideAngularjs、Expressjs 和 passportjs 用于服务器端的身份验证检查
【发布时间】:2014-02-04 13:37:49
【问题描述】:

我有一个 Node.js 应用程序,我在其中使用了 Angular 的 Yeoman 脚手架。我也在服务器端使用 ExpressJS。

所以基本上我的应用程序结构是:

app
  -->views
      --> more files
server.js

结构比这更重,但这是为了保持简单。

基本上我在服务器端使用 PassportJS 进行身份验证。目前正在通过 AngularJS 路由参数执行路由。

我现在遇到一个问题,因为我需要使用中间件方法进行身份验证:

function ensureAuthenticated(req, res, next) {
    console.log('authenticate=' + req.isAuthenticated());
    if (req.isAuthenticated()) { 
        return next(); 
    }
    res.redirect('/')
}

我在服务器端创建了一个app.get 来检查用户是否尝试在不登录的情况下进入管理页面:

app.get('/admin', ensureAuthenticated,
    function(req, res){
        console.log('get admin' + req.params);
        res.sendfile(__dirname + '/app/views/admin/users.html');
    });  

但它从不涉及方法。我做错了什么?

任何建议都会很棒。

【问题讨论】:

    标签: javascript angularjs node.js express passport.js


    【解决方案1】:
    if (!req.isAuthenticated()) {
                return res.send(401, 'User is not authorized');
            }
            next();
    

    【讨论】:

    • 嗨,如果我只是输入 /admin 但我的 url 是 localhost:8888/#/admin,则身份验证有效。如果我输入如图所示的网址,它永远不会到达快递路线
    • localhost:8888/#/admin 是角度领域,所以我认为你应该改变你的逻辑,即将你的视图放在管理路径中
    • 我现在有一个进一步的问题,即当我路由到管理页面时,我在浏览器上按刷新并尝试呈现页面,但它指出没有指定默认引擎。我只是使用html页面?
    • imo 总而言之,管理管理端服务器端更容易/安全,而不是在 angularjs 中很难
    【解决方案2】:

    它不起作用的原因是因为在客户端配置路由时,angularjs locationprovider 没有设置为 htmlmode5。添加了以下行:

    $locationProvider.html5Mode(true);
    

    这基本上从 url 中删除了“#”。

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多