軽量APIアプリケーションを構築する場合は、Knockを使用することを検討します。
Deviseは、サインアップやパスワード編集などで完全な認証ソリューションが必要な従来のアプリケーションに最適なソリューションです。しかし、セッションベースの認証を中心に設計されており、コードベースは魅力的なカスタマイズが可能なためトークンベースの認証では、そのうちの約1%しか使用しません。
基本的な設定は次のようになります。
class ApplicationController < ActionController::API
include Knock::Authenticable
prepend_before_action :authenticate_user
end
今、私たちは、有効なAuthorization: Bearer SOME_TOKEN
ヘッダノックせずに要求を送信する場合は、401 - Unauthorized
応答を返します。
我々はそうのようにそれをテストすることができます。
class UsersControllerTest < ActionDispatch::IntegrationTest
def token
Knock::AuthToken.new(payload: { sub: users(:one).id }).token
end
it 'does not allow an unauthenicated request' do
get users_path
assert_response :unauthorized
end
it 'allow an authenicated request' do
get users_path, headers: { authorization: "Bearer #{token}" }
assert_response :success
end
end
出典
2016-09-25 12:41:32
max
どのようにこれが考案トークン認証よりも違うのですか?そして、各コントローラアクションの前にユーザーを認証するという私の問題をどのように解決するのでしょうか? – user3661956
こんにちは、あなたがAPIを構築している場合は、各リクエストの認証パラメータをサーバーに送信する必要があります。この宝石は、** acts_as_token_authentication_handler_forユーザー**を含むすべてのコントローラでparams(デフォルトで電子メールとトークン)を検証します。 do ** acts_as_token_authentication_handler_forユーザーのみ:[:method1、:method2] ** – Makarov