我使用登录页面登录我的Rails应用程序,该登录页面可以直接通过使用该路径的登录链接到达
match 'ladmin/login' => 'ladmin#login'
或者如果我尝试编辑内容 在任何一种情况下,我都会进入登录页面,这允许我登录,然后将我返回到我尝试使用的页面或应用程序索引页面,但现在作为登录用户。
大部分时间这完全没问题,我登录并返回到我的内容编辑页面或链接索引页面(如果我刚刚使用'登录'链接iself)。
但是我已经能够找到一个错误
如果我使用我的任何ajax链接,request.url
会被错误地记住
(切换组阴影或切换摘要/详细信息,然后下次尝试登录(即使我几次点击)(假设我最初退出)会导致空白页面 - 尽管我现在实际上是登录。有趣的是我注意到,当发生这种情况时,我在浏览器地址栏中结束的网址总是localhost:3000/toggle_row_shading
,这似乎是问题的线索 - 似乎记住了request.url
不正确。
我require digest/sha1
用于在用户模型中进行身份验证,并使用各种身份验证和密码方法。
相关代码似乎在我的LadminController
:
def login
session[:user_id] = nil
if request.post?
user = User.authenticate(params[:username], params[:password])
if user
session[:user_id] = user.id
session[:username] = user.username
uri = session[:original_uri]
session[:original_uri] = nil
redirect_to(uri || {:action => "index", :controller => :links})
else
flash.now[:notice] = "Invalid username/password combination"
end
end
end
我可以暂时解决它
def login
session[:user_id] = nil
if request.post?
user = User.authenticate(params[:username], params[:password])
if user
session[:user_id] = user.id
session[:username] = user.username
redirect_to({:action => "index", :controller => :links})
else
flash.now[:notice] = "Invalid username/password combination"
end
end
end
然而,这会'忘记'我来自的网页,例如一个“编辑”链接,只需使用links#index
在登录后让我开启,这是不理想的。它确实解决了空白页问题,因为现在重现它的步骤更长时间才能实现。
如何让登录信息返回到预定的编辑页面,而不是给我空白页?
btw我的ajax链接代码是:
%a{href: '#', :data => {toggle_group_row_shading: 'toggle'}}
click to toggle
我是否需要额外的路线,因为应用程序是从rails 2.3.8开始的?
我的路线包括
match 'toggle_full_details' => 'links#toggle_full_details'
match 'toggle_row_shading' => 'links#toggle_row_shading'
get 'verify_link/:id', to: 'links#verify_link', as: :verify_link
get 'unverify_link/:id', to: 'links#unverify_link', as: :unverify_link
我应该把它们全部都拿出来吗?
我的应用程序控制器包括:
before_filter :authorize, :except => :login
和
def authorize
unless User.find_by_id(session[:user_id])
session[:original_uri] = request.url #request.request_uri
flash[:notice] = "Please Log In!"
redirect_to :controller => 'ladmin', :action => 'login'
end
end
答案 0 :(得分:1)
我之前遇到过这种情况。我发现的问题是,对于AJAX请求,session[:original_uri]
仍然存储并且......很糟糕。基本上,它存储一个uri用于ajax请求,登录后它没有很好地显示。我最终得到的代码是这样的:
if request.get? && !request.xhr?
session[:original_uri] = request.url
end
这样我们就不会存储在登录后不应重定向的session[:original_uri]
内容。您可以在应用中找到其他内容添加到此条件中。例如,我有一些下载链接可以呈现send_file
,但这些也不适合存储下次登录。