【问题标题】:AngularJS Authentication Global VariablesAngularJS 身份验证全局变量
【发布时间】:2012-10-22 18:23:05
【问题描述】:

我正在尝试实现如下建议的自定义 API 身份验证方法。

Password protecting a REST service?

但是,我在使用 authkey 时遇到了一些问题。我想将收到的 authkey 保存为全局变量,但我似乎无法更改它,它总是与开始时定义的值相同。

我正在使用 Angular (v0.9) 服务实现全局变量。

我的代码的sn-p

angular.service('Authkey', function(){
  return {
"authkey": "0000"
 };
});

控制器

function LoginCtrl(Login_, Authkey_){
this.login = function(){
Login_.query({"Username": this.email,"Password": this.password}, function(response){
        if (response.success === "true") {
            Authkey_.authkey = response.AuthKey;
            console.log(Authkey_.authkey);
            window.location="/main.html";

        } 
    }); 
}
}

是的。页面更改后它总是变为 0000。

感谢我能得到的所有帮助。谢谢。。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    试试这个:

    angular.service('Authkey', function(){
      var authkey = "000";
      return {
         getAuthKey: function(){
            return authkey;
         }, 
         setAuthKey: function(key){
            authkey = key;
         }
     };
    });
    
    //in controller:
    
    Authkey_.setAuthKey(response.AuthKey);
    consol.log(Authkey_.getAuthKey());
    

    这里的区别在于 AuthKey 服务对密钥有一个闭包,而您可以获取/设置该值。

    在您的代码中,您总是返回相同的内容。您在服务中设置的键对您的返回值没有影响

    【讨论】:

    • 感谢您的回复。我试过了。同样的问题仍然存在。如果我在登录页面调用 console.log,值会更改为 response.authkey,但是当我将窗口位置更改为 main.html 时,值会恢复为原始值。奇怪..
    • 哦,我没注意到你这样改变了窗口位置。您应该使用 $location 服务将应用程序位置更改为路线。当您更改这样的位置时,您将丢失所有 javascript 状态。此时您应该将 authkey 存储在 cookie 中。
    • 哦。难怪。我无法让 $location.path 工作。以为我可以使用window.location。您有关于“使用 $location 服务将应用程序位置更改为路线”的示例代码吗? Angularjs 的真正初学者。谢谢。
    • 嗯。我已经使用带有 main.html(标题、菜单栏等)的 ng:views 为不同页面设置了路由列表 Login.html 只是一个简单的两个文本框输入页面。如何设置使用位置信息?
    • 我也是一个相当大的新手 :)。您应该阅读以下内容:docs.angularjs.org/tutorial/step_07,而且我可以告诉您,您应该将一些元素设置为 ng-view 并使用部分更改其内容。你的情况 ng-view 可能应该放在 body 元素上,这样你就可以用 main.html 和 login.html 更改整个正文内容
    【解决方案2】:

    我不确定这在 Angular 0.9 中是否可用...但您可以尝试使用 Module.value(key, value)...。它允许您设置全局可注入值。

    var app = angular.module('myApp', []);
    
    app.value('token', '12345');
    
    app.controller('MyCtrl', function($scope, token) {
         $scope.tokenOut = token; //still 12345.
    });
    

    【讨论】:

    • 是的,可以改变它。
    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 2014-01-10
    • 2014-12-20
    • 2020-09-14
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多