在Rails 3中实现"记住我"功能,可以使用Devise、Authlogic等第三方库,也可以手动实现。这里我们手动实现一个简单的"记住我"功能。
rails generate migration AddRememberTokenToUsers remember_token:boolean
rake db:migrate
class User< ActiveRecord::Base
attr_accessor :remember_me
before_save :set_remember_token
private
def set_remember_token
if remember_me == "1"
self.remember_token = true
end
end
end
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :remember_me, "记住我" %>
<%= f.check_box :remember_me %>
<%= f.submit "登录" %>
<% end %>
class SessionsController< ApplicationController
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
if params[:session][:remember_me] == "1"
cookies.permanent[:remember_token] = user.remember_token
else
cookies[:remember_token] = user.remember_token
end
redirect_to user
else
flash.now[:error] = "邮箱或密码错误"
render 'new'
end
end
def destroy
cookies.delete(:remember_token)
redirect_to root_url
end
end
class ApplicationController< ActionController::Base
before_action :remember_user
private
def remember_user
@current_user ||= User.find_by(remember_token: cookies[:remember_token])
end
end
现在,当用户勾选"记住我"复选框时,系统会在登录成功后将一个临时的cookie(remember_token)存储在用户浏览器中,并将其与用户账户关联。当用户再次访问网站时,系统会自动登录用户,直到用户手动注销或者cookie过期。
注意:这个实现方式仅供参考,实际生产环境中建议使用更安全、更可靠的第三方库来实现"记住我"功能。
领取专属 10元无门槛券
手把手带您无忧上云