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

这对重定向不起作用

如果我使用此登录功能转到另一个页面,则用户可以正确登录

知道为什么重定向不起作用吗?谢谢

更新:

为了更清楚,我插入了第二页代码(控制器):

类PmnodesController你确定你的程序在这个博客里吗

if 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