Ruby on rails 轨道设计有标志';我不在重定向上工作
我有这个方法:Ruby on rails 轨道设计有标志';我不在重定向上工作,ruby-on-rails,devise,signing,Ruby On Rails,Devise,Signing,我有这个方法: def update @user = User.find(params[:id]) respond_to do |format| if @user.update_attributes(params[:user]) if params[:mypmnode] session[:return_to] = projects_pmnode_path(params[:mypmnode]) sign_in(
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
if params[:mypmnode]
session[:return_to] = projects_pmnode_path(params[:mypmnode])
sign_in(@user)
end
format.html { redirect_to(session[:return_to], :notice => 'User was successfully updated.') }
format.xml { head :ok }
else
@create_company = true if params[:user][:company_id].blank? and params[:user][:company_attributes].length > 0
@create_department = true if params[:user][:department_id].blank? and params[:user][:department_attributes].length > 0
format.html { render :action => "edit" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
其思想是,如果用户被更新,他将自动登录并重定向到需要身份验证的页面
在这个页面中,我有:before\u filter:authenticate\u user
这对重定向不起作用
如果我使用此登录功能转到另一个页面,则用户可以正确登录
知道为什么重定向不起作用吗?谢谢
更新:
为了更清楚,我插入了第二页代码(控制器):
类PmnodesControllerif params[:mypmnode]
session[:return_to] = projects_pmnode_path(params[:mypmnode])
sign_in(@user)
end
如果没有,则应自动登录您的使用
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
if params[:mypmnode]
session[:return_to] = projects_pmnode_path(params[:mypmnode])
end
sign_in(@user)
format.html { redirect_to(session[:return_to], :notice => 'User was successfully updated.') }
format.xml { head :ok }
else
@create_company = true if params[:user][:company_id].blank? and params[:user][:company_attributes].length > 0
@create_department = true if params[:user][:department_id].blank? and params[:user][:department_attributes].length > 0
format.html { render :action => "edit" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
如果在@user上更新密码,designe将使会话无效。在更新属性之后,您可以尝试先调用
注销
sign_out(@user)
sign_in(@user)
我也有类似的问题: 我有一个创建并登录用户的控制器方法
def new
@user = User.create!
sign_in @user
redirect_to some_nondefault_path
end
其中某些非默认路径需要身份验证。new
操作不需要身份验证。用户正在被创建并登录,但用户会话没有持续,用户未经授权而被重定向到登录页面,而不是某个非默认路径
我最后通过添加
skip_before_filter :verify_authenticity_token, :only => :new
到第一个控制器。它似乎在创建用户会话之前尝试验证CSRF令牌,但该会话失败并阻止了正常用户会话的创建(即使它没有尝试对用户进行身份验证!)
希望这有帮助 你的意思是用户应该在更新属性后重定向到登录(sign_in)页面?不,我正在尝试让他自动登录,然后将他重定向到私人页面,而不必手动登录。是的,我是肯定的!重定向将转到右侧页面。我认为在更新记录后,当前用户没有正确地重新定义。我更新了密码,所以如果你是用户!使用旧密码值,这可能是问题的原因。但是我不知道如何强制更新当前的用户这对我来说也很有效。作为管理员,我想以其他用户的身份登录,但首先我必须注销。
skip_before_filter :verify_authenticity_token, :only => :new