首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Satellizer Http拦截器

Satellizer Http拦截器
EN

Stack Overflow用户
提问于 2015-03-22 10:48:18
回答 1查看 3.6K关注 0票数 2

目前,我正在使用satellizer库来使用json令牌进行身份验证。在后端,我已经测试了api和身份验证,一切都正常。顺便说一下,我使用Twitter身份验证。

而在前端,即角形部分,在我通过twitter认证并成功地重定向到主页之后,无论何时我去/profile都无法获得用户的信息,它不会呈现用户的信息,而且当我检查google上的网络选项卡时,google甚至不会从后端调用/api/me路由。

我相信这和Http拦截器有关。授权头在前端和后端都设置为x-access-token

这是密码。

代码语言:javascript
复制
app.js

angular.module('MyApp', [ 'ngMessages','ngRoute', 'ui.router','satellizer'])

  .config(function($authProvider) {

         // Twitter
    $authProvider.authHeader = 'x-access-token';
    $authProvider.httpInterceptor = true; // Add Authorization header to HTTP request
    $authProvider.tokenPrefix = 'twitterAuth'; // Local Storage name prefix


    $authProvider.twitter({
      url: '/auth/twitter',
      type: '1.0',
      popupOptions: { width: 495, height: 645 }
    });


  })



  .config(function($stateProvider, $urlRouterProvider,$locationProvider) {
    $stateProvider
      .state('home', {
        url: '/',
        templateUrl: 'app/views/home.html'
      })
      .state('login', {
        url: '/login',
        templateUrl: 'app/views/login.html',
        controller: 'LoginCtrl'
      })
      .state('profile', {
        url: '/profile',
        templateUrl: 'app/views/profile.html',
        controller: 'ProfileCtrl',
      })
      .state('logout', {
        url: '/logout',
        template: null,
        controller: 'LogoutCtrl'
      })


    $urlRouterProvider.otherwise('/');
    $locationProvider.html5Mode(true);


  })

控制器login.js

代码语言:javascript
复制
angular.module('MyApp')
  .controller('LoginCtrl', function($scope, $auth) {

    $scope.authenticate = function(provider) {
      $auth.authenticate(provider);
    };

  });

profile.js

代码语言:javascript
复制
angular.module('MyApp')
  .controller('ProfileCtrl', function($scope, $auth, Account) {
    $scope.getProfile = function() {
      Account.getProfile()
        .success(function(data) {
          $scope.user = data;
        })
    };
  });

服务account.js

代码语言:javascript
复制
angular.module('MyApp')
  .factory('Account', function($http) {
    return {
      getProfile: function() {
        return $http.get('/api/me');
      }
    };
  });

视图profile.html

代码语言:javascript
复制
<div class="container">
  <div class="panel panel-default">
    <div class="panel-heading">Profile</div>
    <div class="panel-body">
      <form method="post">
        <div class="form-group">
          <label class="control-label">Profile Picture</label>
          <img class="profile-picture" ng-src="{{user.picture || 'http://placehold.it/100x100'}}">
        </div>
        <div class="form-group">
          <label class="control-label"><i class="ion-person"></i> Display Name</label>
          <input type="text" class="form-control" ng-model="user.displayName" />
        </div>
        <div class="form-group">
          <label class="control-label"><i class="ion-at"></i> Email Address</label>
          <input type="email" class="form-control" ng-model="user.email" />
        </div>

      </form>
    </div>
  </div>
</div>

这是用户从twitter身份验证中获得的信息应该呈现的地方,在后端,当我使用Chrome时,所有的信息都显示出来了。

我已经抽了四个小时的头发了,我在这里做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-22 11:16:59

我错过了到ProfileCtrl's $scope.getProfile的电话。试试这个:

代码语言:javascript
复制
angular.module('MyApp')
  .controller('ProfileCtrl', function($scope, $auth, Account) {
      Account.getProfile()
        .success(function(data) {
          $scope.user = data;
        });
  });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29193430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档