angularjs - 如何在身份验证后将用户重定向到原始请求,Angular-Fullstack Yeoman?

标签 angularjs authentication yeoman-generator

我使用 Angular-Fullstack yeoman 生成器作为我的项目的基础: https://github.com/DaftMonk/generator-angular-fullstack

我不知道如何将用户重定向到他们登录后最初请求的链接。

我想要发生的事情的示例:

我同时使用样板本地登录和样板 OAuth。

感谢您的帮助!

最佳答案

我明白了,这是我解决这个问题所采取的步骤。 由于某种原因,Stack Overflow 没有格式化我下面的最后 2 个代码块。我用下面的代码做了一个要点(注意需要修改 3 个单独的文件) https://gist.github.com/dcoffey3296/d27c141ef79bec3ff6a6

  1. 将要返回的 URL 存储在 client/app/app.js.run() 方法中的 Cookie 中

    .run(function ($rootScope, $location, Auth, $cookieStore) {
      // Redirect to login if route requires auth and you're not logged in
      $rootScope.$on('$stateChangeStart', function (event, next) {
        Auth.isLoggedInAsync(function(loggedIn) {
          if (next.authenticate && !loggedIn) {
    
            // store the requested url if not logged in
            if ($location.url() != '/login')
            {
                $cookieStore.put('returnUrl', $location.url());
            }
            $location.path('/login');
          }
        });
      });
    });
    
  2. 对于 Oauth,检查此 cookie 并重定向它是否存在于 server/auth/auth.service.js

    function setTokenCookie(req, res) {
      if (!req.user) { 
          return res.json(404, { message: 'Something went wrong, please try again.'}); 
      }
    
      var token = signToken(req.user._id, req.user.role);
      res.cookie('token', JSON.stringify(token));
    
      // return the user to the request page (oAuth) or homepage
      if (typeof req.cookies.returnUrl != 'undefined')
      {
          res.redirect(req.cookies.returnUrl.replace(/"/g, "") || '/');
      }
      else
      {
          res.redirect('/');
      }
    }
    
  3. 对于本地登录,检查$scope.login().then()部分中的cookie,文件:client/app/account/login/login.controller.js

    .then( function() {
          // Logged in, redirect to home
          if (typeof $cookieStore.get('returnUrl') != 'undefined' && $cookieStore.get('returnUrl') != '')
          {
              $location.path($cookieStore.get('returnUrl'));
              $cookieStore.remove('returnUrl');
          }
          else
          {
              $location.path('/');
          }
        })
    

关于angularjs - 如何在身份验证后将用户重定向到原始请求,Angular-Fullstack Yeoman?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29725524/

相关文章:

AngularJS- 在路由到其他 Controller 之前提示用户保存更改

javascript - 提示浏览器登录不正确

rest - 将 REST 身份验证添加到 Grails + SpringSecurity 浏览器应用程序

web-services - REST Web 服务的身份验证

javascript - 当涉及到与 yeoman 一起使用 React 时

babeljs - 错误错误 : A constructor name should not start with a lowercase letter babel/new-cap

angularjs - CKEDITOR 中的文本占位符( Angular 上下文)

javascript - ng-route 注入(inject)器错误 :modulerr [$injector:modulerr] http://errors. angularjs.org/1.3.14/$injector/modulerr

javascript - 单输入多条件 Angular 过滤器

node.js - Yeoman Generator 无法读取 1.1 版本中未定义的属性 Base