2

您如何调整标准的 Authlogic 应用程序,而不是每次都使用主页,而是将用户引导到他们试图访问的任何链接?

示例 1 - 标准登录按预期工作

User goes to app.com
Goes through 'login' process
Redirected to home_url

示例 2 - 用户尝试访问特定页面

User goes to app.com/specific_link
Redirected to login_url for authentication
Expects to be sent back to /special_link; instead sent to home_url

如何在示例 2 中将用户返回到他们想要的链接?

4

4 回答 4

1

登录时保存页面,然后用它在登录后将用户返回到该页面,例如

# redirect to the login page. Call this in the login action, when successful.
def redirect_away(*params)
  session[:original_uri] = request.request_uri
  redirect_to(*params)
end

# returns to the original url from a redirect_away or to a default url
def redirect_back(*params)
  uri = session[:original_uri]
  session[:original_uri] = nil
  if uri
    redirect_to uri
  else
    redirect_to(*params)
  end
end
于 2013-04-22T16:19:33.740 回答
1

迈克尔很接近,但请求对象没有“request_uri”方法。

Murifox 也很接近,但#referrer 没有给你你想要的信息。你可能想要#url。

试试这个(假设“认证”返回您的登录状态):

before_filter :check_authentication
.
.
.
private

def check_authentication
  unless authenticated
    session[:intented_page] = request.url
    redirect_to login_page
  end
end

然后在处理登录的控制器中,成功登录后,您只需执行以下操作:

redirect_to session[:intended_page]

顺便说一句:#referrer 方法最初被错误拼写为#referer。现在有一个别名,所以两种拼写都可以,但是根据字典,“推荐人”是正确的。

(稍后编辑):实际上#referrer 可能是您想要的。如果您在检查身份验证时位于目标 url 的控制器中(如此处的代码中所示),那么您需要#url。如果您在目标控制器重定向的控制器中,那么您需要#referrer。

于 2013-11-15T01:04:00.533 回答
0

我认为request.referer为您保留了这些信息。因此,您检查request对象上是否存在此属性,如果存在,则重定向到它,而不是home_url.

if request.referer
  redirect_to request.referer
else
  redirect_to home_url
end

像这样的东西。

于 2013-04-22T16:14:17.547 回答
0

虽然上述建议可行,但使用 session 并不是最佳选择,cookie 的最大大小为 4,096 字节。这并不多,如果您混合可能是相当长的 URL 可能会导致您的会话存储失败。

您应该改用 cookies 方法。这将创建一个单独的未加密(默认情况下)cookie,将您的会话数据分开。

cookies[:original_uri] = { value: request.request_uri, expires: 10.minutes.from_now }

然后读取您使用的cookie

cookies[:original_uri]
于 2016-11-20T22:28:35.380 回答