2

なので拡張機能ember-simple-authを使って設定しています。OAuth 2.0問題は、ログインしてフォーム データとして送信されているものを確認しようとするたびに、grant_typeandpasswordパラメータのみが送信されることです。ただし、passwordパラメーターは常に空であり、表示されないこともあります。パラメータは常に欠落していusernameます。これまでに見たことがありません。

これが私のlogin.hbsコードです(ところで、私はember-cliを使用しています)

<form {{action 'authenticate' on='submit'}}>
  <label for="identification">Login</label>
  {{input class="form-control" id='identification' placeholder='Enter Login' value=identification}}
  <label for="password">Password</label>
  {{input class="form-control" id='password' placeholder='Enter Password' type='password' value=password}}
  <button type="submit">Login</button>
</form>

私のlogin.jsコードcontrollers

import Ember from 'ember';
import LoginControllerMixin from 'simple-auth/mixins/login-controller-mixin';

export default Ember.Controller.extend(LoginControllerMixin, {
  authenticator: 'simple-auth-authenticator:oauth2-password-grant'
});

私のapplication.jsコードcontrollers

// app/routes/application.js
import Ember from 'ember';
import ApplicationRouteMixin from 'simple-auth/mixins/application-route-mixin';

export default Ember.Route.extend(ApplicationRouteMixin);

私のconfig/environment.jsファイルで

if (environment === 'development') {
  …
  ENV['simple-auth-oauth2'] = {
    serverTokenEndpoint: '/api/v1/oauth/token'
  }
  …
}

It's making the call to the right url after this change

私のイニシャライザフォルダに

// app/initializers/simple-auth-config.js
export default {
  name:       'simple-auth-config',
  before:     'simple-auth',
  initialize: function() {
    window.ENV = FrontENV;
  }
};

このコードのほとんどがチュートリアルからコピーされ、simplelabsいくつかのカスタマイズが加えられていることに気付くのは簡単です。ただし、パラメーターが正しく送信されない理由がわかりません。どんな助けでも大歓迎です!

4

1 に答える 1

1

不足しているパラメーターはclient_idclient_secretです。Ember-Simple-Auth OAuth 2.0 には、これらが含まれていません。これらは、ember アプリで使用される場合に秘密ではないためです。両方のパラメーターを含めるには、次のようなカスタム オーセンティケーターを作成する必要があります。

//app/authenticators/mine.js
import Authenticator from 'simple-auth-oauth2/authenticators/oauth2';

export default Authenticator.extend({
    makeRequest: function(url, data) {
        data.client_id = '…';
        data.client_secret = '…';
        return this._super(url, data);
    }
});

simple-auth-authenticator:oauth2-password-grantに置き換えることで、OAuth 2.0 Authenticator のように使用できますauthenticator:mine

以下は、実際の例の残りのファイルです。

//app/controllers/login.js
import Ember from 'ember';
import LoginControllerMixin from 'simple-auth/mixins/login-controller-mixin';

export default Ember.Controller.extend(LoginControllerMixin, {
    authenticator: 'authenticator:mine'
});

 

//app/routes/application.js
import Ember from 'ember';
import ApplicationRouteMixin from 'simple-auth/mixins/application-route-mixin';

export default Ember.Route.extend(
    ApplicationRouteMixin
);

 

//app/routes/index.js
import Ember from 'ember';
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';

export default Ember.Route.extend(
    AuthenticatedRouteMixin
);

 

//app/routes/login.js
import Ember from 'ember';
import UnauthenticatedRouteMixin from 'simple-auth/mixins/unauthenticated-route-mixin';

export default Ember.Route.extend(
    UnauthenticatedRouteMixin
);

 

<!-- app/templates/application.hbs -->
{{#if session.isAuthenticated}}
  <h2 id="title">Welcome to Ember.js</h2>
  <a {{ action 'invalidateSession' }}>Logout</a>
{{/if}}

{{outlet}}

 

<!-- app/templates/index.hbs -->
<p>Private page</p>

 

<!-- app/templates/login.hbs -->
<form {{action 'authenticate' on='submit'}}>
  <label for="identification">Login</label>
  {{input value=identification placeholder='Enter Login'}}
  <label for="password">Password</label>
  {{input value=password placeholder='Enter Password' type='password'}}
  <button type="submit">Login</button>
</form>

 

//config/environment.js
(…)

ENV['simple-auth'] = {
    authorizer: 'simple-auth-authorizer:oauth2-bearer'
}

ENV['simple-auth-oauth2'] = {
    serverTokenEndpoint: '/api/v1/oauth/token'
}

(…)

この回答は、Ember Simple Auth issue tracker で言及された質問へのコメントから得られたものです。

于 2015-01-21T19:22:33.023 に答える