6

这是我的案例场景:

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

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

我想我会改变这个变量:

$authProvider.loginRedirect = '/';

问题是我无法$authProvider在我的文件中包含我的loginCtrl.js文件,而不会在我的控制台中出现“未知提供者”错误: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 登录时改变人们被重定向到哪里的替代解决方案是什么?

谢谢。

4

3 回答 3

3

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

angular.module('PrayerChain').config(
    [           "$authProvider",
        function($authProvider) {
            $authProvider.loginRedirect = '/settings';
        }
    ]).controller("loginCtrl",
    // ...
于 2015-03-13T15:49:00.397 回答
1

新版本 (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);
    });
于 2015-09-20T18:34:54.627 回答
1

我正在寻找这样做,并发现在 0.13.0 版本中(也许更早?)你可以传递一个选项参数来login像这样运行:

$auth
  .login(user, {
    url: config.api + '/authenticate/customer'
  })
于 2016-05-16T16:10:43.587 回答