Doorkeeper gemでモバイルアプリでのid/passwordの送信でアカウント登録をしたい場合、skip_authorization
をtrueにした状態でUserをcreateしsignupし、そしてaccess_tokenをレスポンスとして返すというのはどうやってやるんだろうというのを調べるのに時間がかかったので自分のやり方を書いておきます。
- Devise::RegistrationsControllerを継承したControllerを用意
- createメソッドでアカウント登録の処理を実装
sign_up(resource_name, @resource)
- access_tokenを生成するメソッドを用意(下記)
- createメソッドでアカウント登録の処理を実装
重要なのがaccess_tokenを生成するメソッドをアカウント登録後に呼び出すことで、次のようになります
# @return [AccessToken]
def access_token(user_id:)
Doorkeeper::AccessToken.create!({
:resource_owner_id => user_id,
:scopes => nil,
:expires_in => Doorkeeper.configuration.access_token_expires_in,
:use_refresh_token => Doorkeeper.configuration.refresh_token_enabled?
})
end
これDoorkeeperのissueに元ネタが書いてあって、たどり着くのにかなり時間かかりました。
issueでは、パラメータなど違うので両方参考になると思います。
私はdoorkepperで生成されるテーブルはoauth_access_tokens
しか作っておらず、application
系のテーブルを使っていないので、application_id
の変数はセットしていません。