设计会话控制器。失败时自定义路由

时间:2016-10-26 00:20:24

标签: ruby-on-rails ruby session devise

现在我正在扩展Devise会话控制器。一切都工作正常,但密码输入错误或无法找到用户。它试图重定向到会话#new。我不希望在我的情况下我希望它重定向到自定义路由,因为它来自与会话新视图不同的视图。我知道after_sign_in_path_for,但我不确定这是我想要的,因为我的具体案例是warden.authenticate!方法。在auth_options中有一个召回散列。这是我想要自定义路线的地方。这是我的会话控制器。

会话控制器

    class SessionsController < Devise::SessionsController
  def create

    super do |user|
      if params[:user][:invitation_id].present?
        invitation = Invitation.find(params[:user][:invitation_id])

        if !user.accounts.exists?(id: invitation.account.id)
          user.accounts << invitation.account
          flash[:tip_off] = "You now have access to your project \"#{invitation.account.name}\""
        else
          flash[:tip_off] = "You are already a member of #{invitation.account.name}"
        end

        cookies[:account_id] = invitation.account.id
        invitation.destroy
        user.save
      end
    end
  end
end

正如我之前所述,这项工作正常我只需要在密码或电子邮件失败时自定义路由。现在它转到会话#new,这对我的情况不起作用。任何帮助都会很棒!感谢

1 个答案:

答案 0 :(得分:1)

您可以覆盖auth_option方法的调用值,以便在失败时重定向到另一个路由。

def auth_option
  { scope: resource_name, recall: "#{controller_path}#another_new_path" }
end