14

Doorkeeper によって保護された API を構築しています。

バックエンドで (パスワードを使用して) ユーザーを手動で作成し、次の内容を に投稿するとoauth/token、Doorkeeper はユーザーのアクセス トークンを正常に生成し、それを返します。

data = {
    username: $("#email_sign_in").val(),
    password: $("#password").val(),
    grant_type: 'password',
    client_id: '880c16e50aee5893446541a8a0b3788....',
    client_secret: 'a5108e1a1aeb87d0bb49d33d8c50d....',
    provider: 'identity'
}

ただし、サインアップフローを行う方法を頭に入れようとしています。

users/createユーザーとパスワードを作成する限り、うまくいきましたが、次のステップで Doorkeeper::AccessToken を生成し、それをクライアントに返す方法がわかりません。理想的には、 user#create アクションでユーザーを作成した後oauth/token、ユーザーの名前とパスワードを使用して POST to にリダイレクトしますが、POST にリダイレクトできないことはわかっています。

Doorkeeper のソースを掘り下げてみましたが、この巧妙なミドルウェアのすべてに少し戸惑っています。これに関するアドバイスは大歓迎です!

4

4 に答える 4

27

それは最も単純なことでした!実際には、user#create で DoorKeeper::AccessToken を生成するだけで、これを返すことができたのに、POST しようとして複雑すぎました。

トークンを生成するコードは次のとおりです。

access_token = Doorkeeper::AccessToken.create!(:application_id => application_id, :resource_owner_id => user_id)
于 2013-11-20T11:53:22.973 に答える
4

標準のAPIを使用してトークンを作成する方法のように、ドアキーパーのソースコードを少し掘り下げます。手動でこれを行う場合は、次の方法を使用することをお勧めします。

find_or_create_for(application, resource_owner_id, scopes, expires_in, use_refresh_token)

あなたの場合

access_token = Doorkeeper::AccessToken.find_or_create_for(application: application, resource_owner_id: user_id)

ドアキーパーのソースコードへのリンク find_or_create_for ドアキーパー

于 2015-12-15T04:58:39.730 に答える
3

Rails では、以下を使用して DoorKeeper を使用してアクセス トークンを作成できます。

Doorkeeper::AccessToken.create!(
  application_id: nil,
  resource_owner_id: user.id,
  expires_in: 2.hours,
  scopes: 'public'
)
于 2016-11-18T15:17:00.183 に答える