最初に
カレンダー企画2020の18日目
プログラミングの勉強を始めて3ヵ月程経ったので学んだことのメモをアウトプットとして記事に残します。
これからプログラミングの世界に入る人の手助けになれたら嬉しい限りです。
間違っていたり、言葉が違っていたり、誤解されるような言葉があったら教えてください^^
言葉を長々と読みづらかったら申し訳ありません。少しずつなれてがんばります。
gemについて
Rubyにはgemという便利なものがあります。
自分でいちから機能を作る事もできるのですが、複雑や大変だったりするのでそういった手間を省いて簡単に機能をアプリケーションに追加できるものです。開発スピードを上げることができます。
(注:頼りすぎは良くないです!って言われました^^)
そのgemの1つに「devise」というのがありそれを今回は取り上げでいきます。
deviseとは?
deviseとは一体何をする機能があるのか?
よくネットのサービスを使用する際に、ユーザー登録を行いませんか?
新規登録とか、ログインとか
それができるgemです!
こういった機能も1から作成できるみたいですがこれを使えば簡単に機能として追加できます!
導入の仕方
まずはインストールから
.
.
.
.
.
.
gem "devise"
アプリケーションを作成した時にGemfileというのが作成されていると思います。
それを開いて一番下に上記のを追記してください。
$ bundle install
bundleもgemの一種ですがdeviseと違い機能を追加ではなく、gemを管理するものです。
$ rails g devise:install
deviseの初期設定をこれで行います。
導入の準備はこれで完了
ログイン画面を表示させてみる
ユーザーテーブルを作成する。
テーブル作成も本来なら1から行いますがdeviseを使うと自動で生成してくれます。
$ rails g devise モデル名 #通常はrails g model モデル名ですがdeviseバージョンは左記
そうするとマイグレーションファイルが生成されています。
その中はこんな感じになっているかと、、、
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
# t.integer :sign_in_count, default: 0, null: false
# t.datetime :current_sign_in_at
# t.datetime :last_sign_in_at
# t.string :current_sign_in_ip
# t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
これはdefaultです。
とくに問題なければこのままですし、
テーブル内にユーザーの名前や住所とか必要なカラム名はアプリケーションに合わせて追記をしてください。
追記が終わったら、
$ rails db:migrate
他にも
config/routes.rb
やapp/model/モデル名.rb
にもdeviseの設定が記載されているはずです。
実はこれでもうログインページは使えます!^^
補足
ログインページのレイアウトを変更したい時は
$ rails g devise:views #ファイル名を設定したい時はviewsの後に記述
ログイン情報を追加した時
初期設定ではメールアドレスとパスワードのみになっている。
実際のアプリケーションでは名前などもログインの条件に入れたい!時に使います
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
devise_parameter_sanitizer.permit(:sign_in, keys: [:name])
devise_parameter_sanitizer.permit(:account_update, keys: [:name, :email])
end
end
before_action :configure_permitted_parameters, if: :devise_controller?
devise機能を使う前configure_permitted_parameters
の処理を行うよ!と定義
下記に定義された内容が実行される。
devise_parameter_sanitizer.permit
データ操作を許可するメソッドです。
1行目:サインアップの際にnameのデータ操作が許可される。
2行目:サインインの際にnameのデータ操作が許可される。
3行目:アカウント情報更新の際にname,emailのデータ操作が許可される。
protected
これはストロングパラメーターと同様の機能です。少し違うのは、他のコントローラーから呼び出されても参照できるという点です。
private
こっちは記述されたコントローラー内だけです。
最後に
deviseはとても便利なものです。うまく活用していけるといいですね。
deviseのコントローラーも追記した記憶あるので自分なりのカスタマイズはもっとできると思います。
ファイルの追加方法はviewsをcontrollersに変えただけだった気がします。(違ったらごめんなさい)