Edited at

Rails セッション管理でお手軽ユーザー管理

More than 3 years have passed since last update.

Railsでは「devise」(gem)を使えば簡単にユーザーログイン機能を実装出来ます。そのため、それで十分楽なのですが、セッション管理(gemなし)で簡易ユーザー管理をやってみたので覚書程度に書いておきます。


仕様


  • ユーザーがサイト内にアクセスしてきたら、user_idを発行しセッションを残す。

  • セッション期限は1ヶ月の設定。

  • セッションのdeleteボタンでセッション削除。(user削除)


create

userテーブルを作成する。

その後、下記をapplication_controller.rb内に記述。

サイト内にアクセスしたら、ユーザー生成。


application_controller.rb

  before_action :login

def login
if session[:user_id].blank?
user = User.create
session[:user_id] = user.id
end
@user_id = session[:user_id]
end



destroy

任意の場所に下記のアクションを設定し、routeを設定。

  def destroy

reset_session
user =User.find(@user_id)
user.destroy
redirect_to root_path
end


セッション期限

下記を追記してセッションの有効期限を設定。


/config/initializers/session_store.rb

Rails.application.config.session_store :cookie_store, key: '_user_id_session', expire_after: 1.month


expire_afterが1ヶ月の有効期限。


補足

ちなみに、deleteした後にすぐにまた新しいuserが発行されます。

application_controller内に作成したloginアクションを任意のコントローラーに移し、deleteのようにrouteを設定すれば、user作成ボタンで作成し、user削除ボタンで削除するという仕様に変更も出来ますね。需要はなさそうですが、追記。


参考

Rails4での基本的なセッションの使い方

Railsでsessionの有効期限を設定