Rails 使った開発日誌 - devise によるログインで独自の認証を実装する
Rails 使った開発日誌 - devise によるログインで独自の認証を実装する
Rails 5.2 と devise 4 でユーザ認証を行う際の 独自の認証を実装する。 他のデータベースやAPIでログインできればそれでログインできることにするものである。
SessionsController
の create
メソッド を変更する。 SessionsController
は Devise::SessionsController
を継承していて、 create
メソッド の中身は super
のみとなっている。
def create
super
end
super
は何をやっているのか、 返り値はなんなのか。
# POST /resource/sign_in
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message!(:notice, :signed_in)
sign_in(resource_name, resource)
yield resource if block_given?
respond_with resource, location: after_sign_in_path_for(resource)
end
これをコピーすれば一応同じことはできる。 まずは warden.authenticate!(auth_options)
で認証をやっているものと思われる。
ここで resource
に値を代入しているわけだが、 そもそも warden.authenticate!
はなにをやっているのか。
StackOverFlow によると、 sign_in
はクッキーを設定しているらしい。 sign_in
は sign_in_out.rb で定義されている。
set_flash_message!
はきっとログイン成功のメッセージを設定しているに違いないので、 warden.authenticate!
がどうなっているかわからないと前に進めない。
もしくは warden.authenticate!
の前に別のアカウントでの認証を挟んでしまうか。
昔似たようなことを Rails で実現していたのだが、試作品として捨ててしまっていた。
Mac の Finder で隠しファイルを表示する方法
ターミナルで
defaults write com.apple.finder AppleShowAllFiles TRUE
を実行する。
この後、 Finder のアイコンを長押しして、 Relaunch を選ぶ。 すると表示されるようになる。
(killall Finder
をやっても表示されるようになるらしい。)
しかしこれをやっても、 IntelliJ IDEA のインタープリタパスで .rvm
を選ぶことはできなかった。
シンボリックリンクでも作ったほうが早いのか。
Config で独自の値を設定する方法
Rails 4, 5 から、 config.x
という書き方で独自の設定値を config
に追加できるようになっている。
(Rails 3 では config.abc = 123
と書けば 各クラス内で Rails.application.config.abc
で値が取れていた。)
config.x
では、 ハッシュで設定したものでも、 .
で繋げて値を取得できる。
config.x.a = {
b: 1
}
Ruby のエルビス演算子
Ruby にエルビス演算子はないっぽい。
できることなら Kotlin にあるような .?
をでハッシュの奥の方までたどり着きたいのだが・・・次のように。
hash[:key1].?[:key2].?[:key3]
source_location
Ruby 2 では、次のようにすると、そのメソッドの記述されている場所が取得できる。
method(:method_name).source_location