用Devise发送重置密码指令后我不想重定向

时间:2014-12-30 19:39:08

标签: ruby-on-rails ruby devise

我只需要在发送重置密码说明时显示一条消息,我不需要重定向到新会话,我覆盖了controllerPassword但是当我放置redirect_to时,这个渲染出错了。

发送重置密码指令后使用的路径

def after_sending_reset_password_instructions_path_for(resource_name)
  flash[:notice] = "We have sent an email with the instructions to reset your password"
  redirect_to new_user_password_path and return
end

这是错误: 在此操作中多次调用渲染和/或重定向......

我该如何解决?

3 个答案:

答案 0 :(得分:0)

如果您完全从代码中删除redirect_to new_user_password_path and return,它将停止重定向。但是,如果您这样做,它将无法显示您的闪存通知,直到用户手动刷新页面。从这里有两个修复:

  • 重定向到当前页面以强制刷新并显示通知。
  • 将您的Flash通知绑定到AJAX请求,以便异步发送。有很多方法可以做到这一点,但this答案非常清楚。

答案 1 :(得分:0)

调用after_sending_reset_password_instructions_path_for的控制器操作有renderredirect_to

尝试删除redirect_to中的after_sending_reset_password_instructions_path_for,然后让调用操作处理它。

答案 2 :(得分:0)

我必须覆盖其他类:SessionsController<设计:: SessionsController 我不知道这是否是最好的解决方案,但对我有用。

这是我做的:

class SessionsController < Devise::SessionsController
  # GET /resource/sign_in
  def new
    url = (request.env["HTTP_REFERER"]).to_s
    path = url.split("?").first

    if path == "http://#{Rails.application.secrets.domain_name}/users/password/new"
      redirect_to new_user_password_path and return
    end

    self.resource = resource_class.new(sign_in_params)
    clean_up_passwords(resource)
    yield resource if block_given?
    respond_with(resource, serialize_options(resource))
  end

end