Ruby on Rails
Railsでのユーザ認証
サーチ…
前書き
Deviseは非常にパワフルな宝石です。インストール直後にサインアップ、サインイン、サインアウトをすることができます。さらに、ユーザーはアプリケーションに認証と制限を追加できます。ユーザーが使用したい場合、Deviseも独自の見解を持っています。ユーザーは、必要と要件に応じて、サインアップとサインインフォームをカスタマイズすることもできます。あなたが初めての場合は、独自のログインを実装することをお勧めします。
備考
rails generate devise:install
を使用してdevise configsを生成するとき、deviseは端末上で一連の命令を実行するよう指示します。
すでにUSER
モデルがある場合、このコマンドを実行すると、 rails generate devise USER
は既存のUSER
モデルに必要な列を追加します。
このヘルパーメソッドbefore_action :authenticate_user!
使用してくださいbefore_action :authenticate_user!
あなたのコントローラーの上部にuser
がログインしているかどうかをチェックします。そうでない場合は、サインインページにリダイレクトされます。
Deviseを使用した認証
gemfileにgemを追加する:
gem 'devise'
次に、 bundle install
コマンドを実行します。
必要な設定ファイルを生成するには、コマンド$ rails generate devise:install
を使用します。
各環境でDeviseメーラーのデフォルトURLオプションを設定する開発環境で次の行を追加します:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
あなたのconfig/environments/development.rb
同様に本番config/environments/production.rb
このconfig/environments/production.rb
ファイルを編集してadd
config.action_mailer.default_url_options = { host: 'your-site-url'}
$ rails generate devise USER
ここで、 USER
は認証を実装するクラス名です。
最後に、 rake db:migrate
を実行rake db:migrate
と、すべて設定されます。
カスタムビュー
ビューを設定する必要がある場合、すべてのビューをアプリケーションにコピーrails generate devise:views
ジェネレータを使用できます。その後、必要に応じて編集することができます。
アプリケーション内に複数のDeviseモデル(UserやAdminなど)がある場合、Deviseはすべてのモデルで同じビューを使用しています。 Deviseは、ビューをカスタマイズする簡単な方法を提供します。 config/initializers/devise.rb
ファイル内でconfig.scoped_views = true
をconfig/initializers/devise.rb
ます。
ジェネレータを使用してスコープ付きビューを作成することもできます。rails rails generate devise:views users
登録可能なモジュールや確認可能なモジュールのように、いくつかのビューセットしか生成しない場合は、-vフラグを使用しrails generate devise:views -v registrations confirmations
デバイズコントローラフィルタとヘルパー
deviseを使用してユーザ認証を行うコントローラを設定するには、このbefore_actionを追加します(あなたのデバイスモデルが「ユーザ」であると仮定します)。
before_action :authenticate_user!
ユーザーがログインしているかどうかを確認するには、次のヘルパーを使用します。
user_signed_in?
現在ログインしているユーザーの場合は、次のヘルパーを使用します。
current_user
このスコープのセッションにアクセスできます。
user_session
- あなたのDeviseモデルが
User
ではなくMember
と呼ばれる場合、上記のuser
をmember
オムニウス
まず、あなたのauth戦略を選択し、それをGemfile
追加します。戦略のリストはこちら: https : //github.com/intridea/omniauth/wiki/List-of-Strategies
gem 'omniauth-github', :github => 'intridea/omniauth-github'
gem 'omniauth-openid', :github => 'intridea/omniauth-openid'
あなたはレールミドルウェアに次のように追加することができます:
Rails.application.config.middleware.use OmniAuth::Builder do
require 'openid/store/filesystem'
provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
provider :openid, :store => OpenID::Store::Filesystem.new('/tmp')
end
デフォルトでは、OmniAuthはルートに/auth/:provider
を追加し、これらのパスを使用して開始することができます。
デフォルトでは、障害が発生した場合、omniauthは/auth/failure
リダイレクトします
has_secure_password
ユーザーモデルの作成
rails generate model User email:string password_digest:string
ユーザモデルにhas_secure_passwordモジュールを追加する
class User < ActiveRecord::Base has_secure_password end
パスワードで新しいユーザーを作成できるようになりました
user = User.new email: '[email protected]', password: 'Password1', password_confirmation: 'Password1'
authenticateメソッドでパスワードを確認する
user.authenticate('somepassword')
has_secure_token
ユーザーモデルの作成
# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token
has_secure_token :auth_token
end
新しいユーザーを作成すると、トークンとauth_tokenが自動的に生成されます
user = User.new
user.save
user.token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.auth_token # => "77TMHrHJFvFDwodq8w7Ev2m7"
regenerate_token
とregenerate_auth_token
を使用してトークンを更新できます
user.regenerate_token # => true
user.regenerate_auth_token # => true