友好的登录系统
按照目前的代码,如果管理员尝试在未登录的状态下访问受限的页面,他就会被引到登录页面上;
在完成登录之后,接着出现的是统一的状态页面——用户最初的请求已经被遗忘了。如果你愿意的话,
也可以对应用程序稍作修改,在用户登录之后将其引到最初请求的页面。
首先,如果 authorize()方法需要让用户去登录的话,应该同时将当前请求的 URI 记在 session
中。
按照目前的代码,如果管理员尝试在未登录的状态下访问受限的页面,他就会被引到登录页面上;
在完成登录之后,接着出现的是统一的状态页面——用户最初的请求已经被遗忘了。如果你愿意的话,
也可以对应用程序稍作修改,在用户登录之后将其引到最初请求的页面。
首先,如果 authorize()方法需要让用户去登录的话,应该同时将当前请求的 URI 记在 session
中。
def authorize
unless User.find_by_id(session[:user_id])
→
session[:original_uri] = request.request_uri
flash[:notice] = "Please log in"
redirect_to(:controller => "login" , :action => "login" )
end
end
一旦用户登录成功,我们就可以检查 session 中是否保存了一个请求 URI:如果有的话,就将用户
请求重定向到他原本请求的地址。
def login
session[:user_id] = nil
if request.post?
user = User.authenticate(params[:name], params[:password])
if user
session[:user_id] = user.id
→
uri = session[:original_uri]
→
session[:original_uri] = nil
→
redirect_to(uri || { :action => "index" })
else
flash.now[:notice] = "Invalid user/password combination"
end
end
end