gem deviseはユーザー登録・ログイン機能を手早く実装するのに便利です。
APIを提供する際にもdeviseの機能で認証が出来ると便利と思い調べました。
OAuth2 Tokenによる認証方法だとdevise + doorkeeperが良いと思われますが、もっと簡易的なBasic認証での方法について。
class Api::ApiController < ApplicationController
before_filter :check_auth
def check_auth
authenticate_or_request_with_http_basic do |username,password|
resource = User.find_by_email(username)
if resource.valid_password?(password)
sign_in :user, resource
end
end
end
end
wikiの記事そのままですが、上記コードを実装することでcurrent_user
メソッドからAPIを実行したユーザーのインスタンスを参照出来ます。
※ 実際にサービス提供する際はSSLは必須になりますね :)
おまけ
下記コードを追加する事で認証無しのリクエスト(ブラウザからのリクエスト時など)を弾くことができる。
unless env['HTTP_AUTHORIZATION']
return render json: '{"message":"Requires authentication"}', status: 401
end