如何在 Angular 控制器中更改 Satellizer 的 $authProvider.loginUrl

How to change Satellizer's $authProvider.loginUrl inside an Angular controller?

本文关键字:Satellizer authProvider loginUrl Angular 控制器      更新时间:2023-09-26

这是我的情况场景:

  1. 用户未登录,他们尝试访问/settings 页面。
  2. "我的设置"控制器根据$auth.isAuthenticated() != true识别它们未登录,并将其重定向到/login
  3. 用户填写他们的电子邮件和密码并点击提交。

我想在第三步中做的是将它们重定向到/settings 页面,而不是主页。

我想我会改变这个变量:

$authProvider.loginRedirect = '/';

问题是我无法在loginCtrl.js文件中包含$authProvider,而不会在我的控制台中收到"未知提供程序"错误:https://docs.angularjs.org/error/$injector/unpr?p0= 换句话说,当我尝试包含它时,Angular 无法识别$authProvider。以下是我的loginCtrl.js文件的外观:

/* Everything is blowing up because I'm trying to include $authProvider */
angular.module("PrayerChain")
    .controller("loginCtrl", ["$rootScope", "$scope", "$state", "$http", "$auth", "$authProvider", loginCtrl]);
function loginCtrl($rootScope, $scope, $state, $http, $auth, $authProvider) {
    $authProvider.loginRedirect = '/settings';
    $scope.login = function () {
        $auth.login({ Email: $scope.email, Password: $scope.password })
        .then(function() {
        })
        .catch(function (response, status, headers) {
            console.log(response);
            $scope.error = JSON.parse(response.data);
        });
    };
}

是否可以在控制器中包含$authProvider?如果没有,在使用Satellizer登录时更改人们重定向位置的替代解决方案是什么?

谢谢。

通常只能在配置时访问提供程序对象,而控制器是在运行时创建的。如果您需要设置身份验证提供程序,请尝试执行以下操作:

angular.module('PrayerChain').config(
    [           "$authProvider",
        function($authProvider) {
            $authProvider.loginRedirect = '/settings';
        }
    ]).controller("loginCtrl",
    // ...
新版本

(0.12.5)不再使用此设置。您需要在控制器中设置 url

$auth.login({ Email: $scope.email, Password: $scope.password })
    .then(function() { 
        $location.path('your-new-route');
    })
    .catch(function (response, status, headers) {
        console.log(response);
        $scope.error = JSON.parse(response.data);
    });

我一直在寻找这样做,发现在 0.13.0 版本中(也许更早login

$auth
  .login(user, {
    url: config.api + '/authenticate/customer'
  })