新手问题 rails 登陆跳转问题

gefangshuai · 2013年08月25日 · 最后由 gefangshuai 回复于 2013年08月25日 · 4804 次阅读

还是 blog 项目,有一个 before_filter:authorize 过滤器,需要验证 session 中是否有 user_id。 ------------背景完----------- 现在 blog 的文章页面有个 edit 按钮,是只允许登陆后才能操作的,点击 edit 以后,就先到 authorize 过滤器方法中进行验证 session 中的 user_id,然后发现没有登陆,则跳转到了登陆界面。 -------------问题来了---------- 在登陆界面输入用户名和密码后,验证登陆通过,怎么才能重新到 edit 所指向的那个 url?这个 url 是动态的,就是说只要点击到需要登陆的 url,就需要用户先登陆,登陆成功后跳转到那个 url。

edit 的 url 可以通过 url 记录(类似淘宝,长长的 url 里面记录了登陆成功后要去的页面 url),也可以通过 cookie 记录。只要有记录,用户登陆成功后你就跳转到那个 url 就行了。

#1 楼 @cantin 那在跳转登陆界面的 action 中怎么获得拦截过来的 url 呢?

可以用 HTTP 的 Referer header

记录在 session 里面

首先在跳转前,把当前请求的 URL 写到 SESSION 里。

def require_login
    unless current_user
        session[:request_page] = request.original_url
        redirect_to(login_path)
    end
end

当用户密码验证成功之后,destroy 该值。

if session[:request_page]
        url = session[:request_page]
        session[:request_page] = nil
        redirect_to url
    else
        redirect_to admin_path
end

#5 楼 @leomayleomay #6 楼 @u1375863851 哦,学习了!不过个人不太喜欢往 session 里塞东西。

@gefangshuai 因为 http 协议是无状态的,如果不存在 session 里面,就只能存在 db 里面了,或者其他的序列化方式

9 楼 已删除

#8 楼 @leomayleomay 不能通过一个中间变量传递吗?比如在跳转登陆界面的 controller 方法里定义一个变量,将 url 赋值给此变量,传递到页面。用户点击登陆后,再将此变量从页面传递到登陆校验的 controller 方法?

嗯,也可以,是很常见的做法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号