Ruby on Rails
Deviseを使用してApiを認証する
サーチ…
前書き
DeviseはRailsの認証ソリューションです。さらに進める前に、APIに関する簡単なメモを追加したいと思います。したがって、APIはセッションを処理しません(ステートレスです)。これは、要求後に応答を提供し、それ以上の注意を必要としないことを意味します。つまり、サーバーに要求するたびにシステムが動作するために、すべてのAPIで認証の詳細を渡し、Deviseに認証の詳細を保存しないように指示する必要があります。
入門
そこで、まず、レールプロジェクトとセットアップデバイスを作成します
レールアプリケーションを作成する
rails new devise_example
今すぐ宝石リストに追加する
railsプロジェクトのルートにある 'Gemfile'というファイルを見つけることができます
次にbundle install
実行します
次に、ジェネレータを実行する必要があります。
rails generate devise:install
コンソール上では、それに続く指示はほとんどありません。
開発モデルを生成する
rails generate devise MODEL
次に、 rake db:migrate
実行しますrake db:migrate
詳細はDevise Gemをご覧ください。
認証トークン
認証トークンは、固有のトークンを持つユーザーを認証するために使用されます。まず、ロジックを進める前に、 auth_token
フィールドをDeviseモデルに追加する必要があります
したがって、
rails g migration add_authentication_token_to_users
class AddAuthenticationTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :auth_token, :string, default: ""
add_index :users, :auth_token, unique: true
end
end
次に、 rake db:migrate
実行しますrake db:migrate
auth_token
を使って認証を行うようにauth_token
app/controllers/application_controllers.rb
最初にこの行に
respond_to :html, :json
これは、レールアプリケーションがhtmlとjsonの両方で応答するのに役立ちます
その後、
protect_from_forgery with: :null
これを変更します:null
私たちはセッションを扱っていないので、 :null
です。
ここで、application_controllerに認証メソッドを追加します
したがって、デフォルトでは、Deviseは電子メールを独自のフィールドとして使用し、カスタムフィールドも使用できます。この場合、user_emailとauth_tokenを使用して認証されます。
before_filter do
user_email = params[:user_email].presence
user = user_email && User.find_by_email(user_email)
if user && Devise.secure_compare(user.authentication_token, params[:auth_token])
sign_in user, store: false
end
end
注:上記のコードは純粋にあなたのロジックに基づいています。私は実際の例を説明しようとしています。
上記のコードの6行目では、 store: false
を設定していることがわかりますstore: false
これは各リクエストでセッションを作成できないようにするため、