【发布时间】:2023-03-19 21:51:01
【问题描述】:
我按照 Michael Hartl 的教程构建了一个带有登录的注册表单。我想我会尝试在登录表单中添加一个记住我的复选框,并将其值默认为 0,然后在选中时设置为 1。
我在 sessionhelper 中添加了一个 if 语句:
module SessionsHelper
def login(user)
if params[:remember_me]
cookies.permanent.signed[:remember_token] = [user.id, user.password_salt]
current_user = user
else
cookies[:remember_token] = [user.id, user.password_salt]
current_user = user
end
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
def logged_in?
!current_user.nil?
end
def logout
cookies.delete(:remember_token)
current_user = nil
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
end
....但由于某种原因,当我登录时勾选或未勾选 cookie 过期时间和日期从未设置。当我在 Firefox 中检查 cookie 信息时,它总是显示“会话结束”。我错过了什么吗?
我的控制器:
class SessionsController < ApplicationController
def new
end
def create
user = User.authenticate(params[:session][:email], params[:session][:password])
if user.nil?
flash.now[:error] = "Invalid email password combination"
render 'new'
else
login user
redirect_to user
end
end
def destroy
logout
redirect_to root_path
end
end
查看:
<%= form_for(:session, :url => sessions_path) do |f| %>
<%= f.text_field :email, :placeholder => "Email" %>
<%= f.password_field :password, :placeholder => "Password" %>
Remember me? <%= f.check_box :remember_me, :value => 1 %>
<%= f.submit "Log in", :id => "login_submit" %>
<% end %>
感谢您的帮助。
【问题讨论】:
-
能否将表单模板添加到问题中?
-
请注意
:value => 1不是必需的,请参阅the documentation。
标签: ruby-on-rails ruby ruby-on-rails-3 rubygems ruby-on-rails-3.1