3

我有一个使用 RESTful 身份验证插件的 RoR 应用程序。一切都很好。我最近启用了基于 cookie 的身份验证,并且效果也很好。问题是当用户使用 cookie 进行身份验证时,我想更改默认登录页面。我希望将经过 cookie 身份验证的用户重定向到从登录表单成功登录后重定向到的同一页面。它们始终被定向到原始请求 URL。我正在为此绞尽脑汁,因为我认为我理解它是如何工作的,而且我所做的每一个改变似乎都没有影响。

我怀疑这很简单,但我显然错过了它。如果您提供任何反馈、指导或建议,我将不胜感激。

4

5 回答 5

1

我解决了这个问题,但在我看来它有点难看。这就是我所做的。

在 cookie 身份验证方法中,我设置了一个会话变量,指示使用了 cookie 登录方法。

def login_from_cookie
  user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
  if user && user.remember_token?
    session[:cookie_login] = true   **# this is my addition**
    self.current_user = user
    handle_remember_cookie! false # freshen cookie token (keeping date)
    self.current_user
  end
end

然后在 :before_filter set_current_user我只是检查该变量并重定向是否已设置确保将变量设置为 nil。

def set_current_user
  Authorization.current_user = current_user
  if session[:cookie_login] 
    redirect_to :controller => :users, :action => :search
    session[:cookie_login] = false
  end
end

它不漂亮,但它确实有效。我绝对愿意接受有关如何清理它的任何建议。

于 2009-05-24T17:44:11.620 回答
0

你不能只设置你的路线,这样

map.root :controller => :users, :action => :search

然后有一个 before_filter 来检查以确保设置了一些“登录”参数?只需在用户登录时设置此参数,无论是通过 cookie 还是通过正常方式。然后,无论是cookie认证还是普通认证,都会转到默认页面。也许我误解了这个问题。

于 2009-11-20T13:26:38.267 回答
0

您可以在成功登录后将此行添加到会话控制器:

redirect_to :controller => 'dashboard', :action => 'index'
于 2009-05-24T15:30:36.823 回答
0

我正在使用 Bort,所以也许这不是它Restful_Authentication本身的一部分,但是会话控制器中有一个successful_login方法使用这个 restful_auth 方法:

redirect_back_or_default( root_path )

这是在定义authenticated_system.rb

    def redirect_back_or_default(default)
      redirect_to(session[:return_to] || default)
      session[:return_to] = nil
    end
于 2009-05-24T16:31:14.457 回答
0

Restful Authentication 存储发出请求时尝试访问的原始 URL。您所要做的就是阻止它存储该值或在执行 cookie 身份验证时清除该值,然后用户将被重定向回您的默认页面。

我可能会在 authenticated_system.rb 中这样做

 def login_from_cookie
  user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
  if user && user.remember_token?
    self.current_user = user
    session[:return_to] = nil # This clears out the return value so the user will get redirected to the default path
    handle_remember_cookie! false # freshen cookie token (keeping date)
    self.current_user
  end
end

是 session[:return_to] = nil

然后只需确保您已在会话控制器中设置了默认路径,您就应该一切就绪。会话控制器中的代码应该是这样的:

redirect_back_or_default(the_path_you_want_to_send_them_to)
于 2009-11-25T21:05:23.557 回答