11

私は、strongloop ループバック バックエンドを使用して角度のあるアプリケーションを作成しています。

また、loopback-passport モジュールを使用して、Facebook によるサードパーティのログインを統合します。

loopback-example-passport ではすべて問題なく、アプリにリダイレクトする直前のアプリでもすべて問題ありませんでした。ユーザーとアクセストークンが作成されました。

コード:

app.get('/auth/login', ensureLoggedIn('/#login'), function(req, res, next) {
    console.log('LOOGED IN!!');
console.log(req.user);

  res.redirect('/#auth/login');
});

正常に動作します。しかし、私は理解できません。angularアプリケーションに認証済み状態を与える方法。

「/#auth/login」をルーティングするコントローラーを作成しようとしました:

.controller('AuthCalbackCtrl', function($scope, $cookies, $location, AppAuth, $http, User, LoopBackAuth) {
//analogue of User.login responce interceptor
   LoopBackAuth.currentUserId = $cookies['userId'] || null;
   LoopBackAuth.accessTokenId = $cookies['access-token'] || '';
   LoopBackAuth.rememberMe = false;
   LoopBackAuth.save();
   //asking for currentUser
   User.getCurrent(function(user) {
     console.log('ser.getCurrent ', user);
   });
   $location.path('/');
  })

このコードは GET /api/users/2 をリクエストしますが、401 エラーを受け取ります。

ファイル /loopback/lob/models/user.js 設定権限を微調整すると:

  principalType: ACL.ROLE,
  // principalId: Role.OWNER,
  principalId: Role.EVERYONE,
  permission: ACL.ALLOW,
  property: "findById"

次に、リクエスト GET /api/users/2 は 200 を受け取り、すべて問題ありません。

私は少し混乱しています。access-token と userId は知っていますが、Angular アプリをループバックに認証させる方法がわかりません

それを行う方法はありますか?

4

1 に答える 1

8

これが有効なコードです。

app.get('/auth/login', function(req, res, next) {
  //workaround for loopback-password 
  //without this angular-loopback would make incorrect authorization header
  res.cookie('access-token', req.signedCookies['access-token']);
  res.cookie('userId', req.user.id);
  res.redirect('/#auth/login');
});

問題は、loopback-passport が Cookie に署名することです。

         res.cookie('access-token', info.accessToken.id, { signed: true,
           maxAge: info.accessToken.ttl });

文字列では、「s:.eBvo8bpo9Q9wnNrPjjlG%2FAcYqWkxEgNFqn%2FO54rdGwY」のようになります。

しかし、loopback-angular はアクセス トークンを header.authorization にコピーするだけなので、そこにプレーン cookie を配置する必要があります。

于 2014-06-14T15:10:12.920 に答える