1

私は、ember simple authを使用して(Facebookなどから)アクセストークンを取得し、それをバックエンドに送信してfb.me()を呼び出し、JWTを使用してトークンを作成するoauth2認証プロセスを実行しています。このトークンはその後、ember アプリに送り返されます。このトークンは、ember-data によって行われた要求を含むすべてのサーバー要求と共に送信する必要があります。

また、ブラウザのリロード後にこのトークンを使用できるようにする必要があります。

セッションにプロパティ「authToken」を設定する多くのオプションを試しました-これはローカルストレージを使用して認証されたセッションを永続化すると思います。

しかし、私は常にこのトークンの取得を調整するのに問題があるようです.セッションにアクセスできないか、トークンがセッション上にないか、emberデータヘッダーを変更できません.

これを行う方法の簡単な例を誰かが持っていますか?簡単だと思いますが、明らかに何かが欠けています!

ありがとう。

アップデート

私ができる唯一のことは、以下に示すように鳥居を使用することですが、セッションの内容は更新時にまだ失われています.認証されていることはわかりますが、ここで設定したトークンが失われています. だから私はまだ本当の解決策を探しています。

   authenticateWithGooglePlus: function () {
      var self = this;
      this.get('session').authenticate('simple-auth-authenticator:torii', 'google-oauth2')
        .then(function () {
          resolveCodeToToken(self.get('session'), self);
        });
    }

resolveCodeToToken は、サーバーからベアラー トークンを取得し、それをセッションに設定してから、保護されたページに遷移します。

function resolveCodeToToken(session, route) {
  var authCode = session.content.authorizationCode;
  var type = session.content.provider.split('-')[0];
  $.ajax({
    url: 'http://localhost:4200/api/1/user/auth/' + type,
    data: {authCode: authCode}
  }).done(function (response) {
    // todo handle invalid cases - where user is denied access eg user is disabled
    session.set('authToken', response.token);
    route.transitionTo('activity', moment().format('DDMMYYYY'));
  });
}

そして、すべてのリクエストに (セッションに保存された) トークンを配置するためのカスタムオーソライザーがあります。

import Base from 'simple-auth/authorizers/base';

export default Base.extend({
  authorize: function(jqXHR, requestOptions) {
    var accessToken = this.get('session.content.authToken');
     if (this.get('session.isAuthenticated') && !Ember.isEmpty(accessToken)) {
       jqXHR.setRequestHeader('Authorization', accessToken);
     }
  }
});

更新後に this.get('session.content.authToken') が未定義になる理由がわかりません。デフォルトでは、セッションはローカルストレージに永続化されていると思いました。認証されているという事実は永続化されますが、サーバーは保護されたエンドポイントへの呼び出しを拒否するため、トークンがないと役に立ちません。

4

1 に答える 1

2

最初に Facebook からトークンを取得し、それを独自のサーバーに送信してアプリのトークンと交換する、独自のカスタム認証システムを実装する必要があります。それができたら、ember-data リクエストの承認やセッション永続性などを無料で取得できます。

この例を見てください: https://github.com/simplabs/ember-simple-auth/blob/master/examples/7-multiple-external-providers.html

于 2014-12-01T08:07:02.093 に答える