[Rails] deviseで複数のログインを提供する
サービスを運用していると現在のUIを変更するだけでなく、別途違うUIを用意する必要がでてきます。 A/Bテストでもそうですし、単純に現行UIを残しつつ新しいものを用意する場合です。この場合、単純にRouteの変更だけで復旧できるので安全でもあります。
今回はdeviseを用いたログインUIを複数作るケースです。deviseは魔法感が高いライブラリですが、基本的にオーバーロードして適宜変更で乗り切れるように思います。
まずは、sessionを継承します。 action_v2というActionを作りました。基本的にdeviseのソースをコピペです。ハマりどころはfilterをちゃんと設定するところでしょうか。
prepend_before_action
ですね。create_v2を入れないとメソッドが走りません。 また、create_v2で auth_optionsのrecallにnew_v2を設定することでvalidation失敗時にnew_v2にrouteされるようになります。
class Students::SessionsController < Devise::SessionsController prepend_before_action :allow_params_authentication!, only: [ :create, :create_v2 ] def new_v2 self.resource = resource_class.new(sign_in_params) clean_up_passwords(resource) yield resource if block_given? respond_with(resource, serialize_options(resource)) end def create_v2 auth_options = { scope: :student, recall: "students/sessions#new_v2" } 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
で、routeの設定は、下記のようになります。as:
は両方必要なく片方につければ良いようです。
get "/student/login" => "students/sessions#new_v2", as: :student_login post "/student/login" => "students/sessions#create_v2"
最後にnew_v2.html.erb
のfom_for
のurl:
に新しいパスを指定すればできあがり。
<%= form_for(resource, as: resource_name, url: student_login_path, html: {class: ""}) do |f| %>
[Chromeos]localhost:portをCrostini VMのIP:portにフォワードする方法
Crostiniがstableにきた!と思ってbetaからstableに変更したらLinuxVMが無くなりました。気をつけてください。。 stableに変更したのが理由なのかわかりませんが、socatでcrostiniのlocalhostのポートへのマッピングがうまくいかなくなりました。 例えば、開発時にlocalhost:3000をcrostini vm上で立ててもホストのchromeosのchromeからアクセスできなくなりました。
下記のようなエラーでうまくいきません。
This site can’t be reached
localhost refused to connect.
ERR_CONNECTION_REFUSED
解決方法をさがしているとRedditで同じようなことを聞いている人がいました。
Connection Fowarderdというextensionを入れ、forwardingを設定します。
ifconfigでVMのIPを調べてDestinationを適宜変更してください。
Vimの検索単語ハイライト時の背景色の変更方法
/
で検索しているときにどれがハイライトされているかわからなかったので調べてみた。.vimrc
に下記を追加。
set hlsearch hi Search ctermbg=Cyan hi Search ctermfg=White
色は下記で確認。
:so $VIMRUNTIME/syntax/colortest.vim
参考:https://stackoverflow.com/questions/7103173/vim-how-to-change-the-highlight-color-for-search-hits-and-quickfix-selection
Golangをgoenv経由でインストールする方法
一度、rbenv
, nvm
などの言語環境設定ツールを使うとそれなしではバージョンのアップグレードなどが不安になってしまいます。
Goの場合はgoenv
というものがあるようなので、これを使ってgolangを入れることにしました。
# git clone $ git clone https://github.com/syndbg/goenv.git ~/.goenv # add envvariables $ echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.bash_profile $ echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.bash_profile $ echo 'eval "$(goenv init -)"' >> ~/.bash_profile $ source .bash_profile # check if it's loaded $ echo $GOENV_ROOT # install version 1.11.0 $ goenv install 1.11.0 # set as global $ goenv global 1.11.0 # confirm if it's working $ go version go version go1.11 linux/amd64 How to install Golang with goenv