繁体   English   中英

如何结合护照和angular-ui路由

[英]How to combine passport and angular-ui routing

我想知道如何将角度ui路由与护照结合起来。 我找到的所有示例都使用node.js路由。

var routerApp = angular.module('routerApp', ['ui.router']);

routerApp.config(function($stateProvider, $urlRouterProvider) {

$urlRouterProvider.otherwise('/home');

$stateProvider

    .state('home', {
        url: '/home',
        templateUrl: 'partial-home.html'
    })

    .state('about', {
        // for example just show if is loggedIn       
    });

我将如何在上面的代码段中实现此功能?

function isLoggedIn(req, res, next) {

    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated())
        return next();

    // if they aren't redirect them to the home page
    res.redirect('/');
}

谢谢你的每一个提示

一种方法是在Angular中创建一个服务,使用$ http命中Express中的端点。 $ http返回一个带有成功的promise和可用于更改状态的错误方法。 如果您正在构建单页应用程序(SPA),这可能就是您需要知道的全部内容。 例如:

// An Angular service that talks to Express
UserService.$inject = ['$http', '$state']; 

function UserService($http, $state) {

    this.loginUser = function (user) {
      $http.post("/api/login", user)
        .success(function (data, status) {
          console.log('Successful login.');
          console.log('data = ' + data); 
          console.log('status = ' + status); 
          $state.go('welcome'); // 
      })
        .error(function (data) {
          console.log('Error: ' + data);
          $state.go('somewhereelse'); 
      });
  }; 

$ state.go是一种UI路由器便捷方法,它将呈现您定义的状态。

在Express中,您需要为Passport编写自己的回调函数来控制返回的内容。 例如:

 // Express Route with passport authentication and custom callback
  app.post('/api/login', function(req, res, next) {
      passport.authenticate('local-login', function(err, user, info) {
        if (err) {
        return next(err); 
      }
      if (user === false) {
        res.status(401).send(info.message);  
      } else {
        res.status(200).send(info.message); 
      }
    })(req, res, next); 
  });

在这个例子中,我使用的是“本地登录”Passport策略,它在后台运行它的魔力。 如果用户通过身份验证,它将向Angular发回200,这将依次触发.success。 否则它将发送401 Unauthorized并关闭.error。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM