javascript - 使用 angular.js 中的 OAuth2 创建的 token 管理身份验证

标签 javascript angularjs symfony

我的消息是基于此消息http://stackoverflow.com/questions/26748106/how-to-manage-authentication-with-token-in-angular-js 我有一个 PHP5(Symfony2)的后端和一个(angularJS)的前端 我已经成功地用后端创建了 token ,但是我遇到了 angularjs 的问题,我必须从 URL 获取 token 并将其放入每个请求获取每个示例的客户列表,这就是我所做的:

Controller :signin.js

'use strict';
  // signin controller
app.controller('SigninFormController', ['$scope','$http', '$state','$localStorage','authorizationInterceptor', function($scope, $http, $state,$localStorage,authorizationInterceptor) {
    $scope.user = {};
    $scope.authError = null;
    $scope.login = function() {
    $scope.authError = null;
      // Try to login
    $http({method: 'POST', url: 'myURL/oauth/v2/token?client_id=clientID&client_secret=clientSecret&grant_type=client_credentials'})
   .success(function(response){
     if (response.data.user) {  
     $scope.errors.splice(0, $scope.errors.length); 
     $scope.msgs.splice(0, $scope.msgs.length);
     $scope.posts = data; // response data 
     var token = this.$window.sessionStorage($scope.posts.access_token);
     console.log(""+token);
     console.log("success");
     $state.go('app.home');}
   })
   .error(function(data, status, headers, config) {
    $scope.authError = 'Email or Password not right';
    console.log("data error ...");
  });

    };

和我的服务:access-services.js

.factory('Security', ['$http', function ($http) {
        var token;
        function login(email, password) {
            return $http.post('/auth/login', {email: email, password: password})
                .then(function (response) {

                    if (response.data.token) {
                        token=response.data.token;
                    }
                });
        }

        function getToken(){
            return token;
        }

        return {
            login:login,
            token:getToken
        }; }])
.factory('authorizationInterceptor', ['Security', function (Security) {
        return {
            request: function (config) {
                var token=Security.getToken();
                config.headers = config.headers || {};
                if (token) {
                    config.headers.Authorization = 'Bearer ' + token;
                }
                return config;} }; }]);

但这就是我在控制台中得到的: enter image description here

感谢帮助

最佳答案

您必须有 Angular 才能使用 token 拦截器。这可以在应用程序配置阶段完成

yourApp.config(function($httpProvider) {
    $httpProvider.interceptors.push("authorizationInterceptor");
});

我建议您阅读以下系列文章。尽管它们是针对 ASP.net MVC 编写的,但所提出的概念是通用的

http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

希望这有帮助

关于javascript - 使用 angular.js 中的 OAuth2 创建的 token 管理身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29919245/

相关文章:

javascript - 使用 getElementsByClassName 从类名中查找元素

c# - 从 ASP.NET 操作返回文件时出现 ERR_SPDY_PROTOCOL_ERROR

php - 'SELECT count(DISTINCT o0_.id) AS sclr_0 FROM Order o0_' 执行时出现异常

forms - 以 symfony 形式按字母顺序对组进行排序

javascript - Angular 2 - 示例代码 - 定义的模型属性未定义

javascript - 何时返回 jQuery 函数而不是仅仅调用它?

javascript - AngularJS应用程序在登录后重定向

AngularJS 下载 HTML5 视频元素的完整视频文件

javascript - $_SESSION 破坏 url 中的参数(在 Angular 项目中)

Symfony2 - block 类型 sonata.user.block.menu 不存在