をログアウトし、同様に@current_user
を削除することができsession[:user_id]
を削除する方法を私は理解していない:マイケル・ハートル章8.3は、私はマイケル・ハートルのRailsのチュートリアル、章8.3のRubyはセッション</em>をログアウト<em>を通じてつもりセッション
はSessionControllerです:
class SessionsController < ApplicationController
def new
end
def create
user =User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in(user)
redirect_to user
else
#flash.now will only flash once - if a new request or view is rendered,the flash will go away now
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out
redirect_to root_path
end
end
、ここではSessionsHelperは、ログインおよびログアウトヘルパーのためである:
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
end
def current_user
#find the user if @user is not defined yet, or else, just keep the current user
#that way we dont have to do a database search every time current_user is called
@current_user ||= User.find_by(id: session[:user_id])
end
def logged_in?
!current_user.nil?
end
def log_out
session.delete(:user_id)
end
end
私が理解している方法は、@current_user
が一度ログインすると定義された後、session[:user_id]
がそれ自身に設定されているので削除されたにもかかわらず、変数がまだ残らないようにしますか?
@current_user ||= User.find_by(id: session[:user_id])
@current_user
変数が削除されていることにお気づきのある行動はありませんでした。しかし、デバッガでテストしたところ、誰かが一度ログアウトすると、@current_user
はnil
になります。
誰かが私に力学を説明できますか?
ありがとうございます!しかし、私はこれを試しました: > def destroy Rails.logger.debug( "@ current_user value:#{@current_user.inspect}") log_out > Rails.logger.debug( "@ current_user value:#{ current_user.inspect} ") redirect_toのroot_path エンド を>私は@current_userは、両方のカウントにゼロであることを取得しています:{:SessionsController#によって 処理は、HTML パラメータとして破壊する" authenticity_token "=>" OjnBcB5CAdUbuGmW68lzlkVqx8B3R7f + 6ZTdUGBj61XC/vuFa9Vp7oAodT6RtkFNVTduPgp0hB5UaMVStJIjGg == "} > @current_user値:nil > @current_user値:なし は、current_userが設定されていないようですか? – lzhengem
申し訳ありませんが、あなたはそうです。私は私の答えの例を更新しました。 'destroy'アクションは、現在のユーザーを知る必要がないので、決して設定しませんでした。現在のユーザが必要とするリクエストは 'current_user'ヘルパメソッドを呼び出し、' @ current_user'はリクエストの終了時まで存在します。 – cschroed
ありがとう、ありがとう!私の_header.html.erbの部分では、私はこれを使用しました: '