设计:after_sign_in_path_for(资源)无效

时间:2013-05-31 10:47:56

标签: devise ruby-on-rails-3.2

我正在使用设备进行用户注册/进入。但是,当用户从公共可访问页面登录时,请将重定向设计为root_path。

我试着用这个:

def after_sign_in_path_for(resource)
 request.referrer
end

当用户尝试登录时,会显示错误“未正确重定向”。

有人可以告诉你怎么做吗?

1 个答案:

答案 0 :(得分:0)

我相信如果我是对的,当用户登录时要覆盖重定向是在controllers/devise/sessions_controller.rb内更改以下方法如果你没有生成设计控制器generate devise controller。完成后,您需要在devise/sessions_controller.rb

中包含以下内容
 def create
    self.resource = warden.authenticate!(auth_options)
    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)
   # respond_with resource, :location => after_sign_in_path_for(resource)
    if current_user.role? :administrator
      redirect_to dashboard_path
    else
      redirect_to rota_days_path 
    end
  end

在上面的示例中,默认情况下sessions_controller - create方法使用以下内容:# respond_with resource, :location => after_sign_in_path_for(resource)我已注释掉了。通过添加if语句来检查current_users角色是否为管理员。如果他们然后他们被重定向到仪表板页面。如果没有,则将它们重定向到rota页面。

或者,设计助手说你也可以这样做:

      def after_sign_in_path_for(resource)
       stored_location_for(resource) ||
         if resource.is_a?(User) && resource.can_publish?
           publisher_url
         else
           super
         end
     end

希望这会有所帮助。

<强>更新

 def create
    @hospital_booking = HospitalBooking.new(params[:hospital_booking])

    respond_to do |format|
      if @hospital_booking.save
        format.html { redirect_to :back, notice: 'Photographer Shift was successfully created.' }
        format.json { render json: @hospital_booking, status: :created, location: @hospital_booking }
      else
        format.html { render action: 'new' }
        format.json { render json: @hospital_booking.errors, status: :unprocessable_entity }
      end
    end
  end

这里发生的事情是保存hospital_booking后,它会重定向回问题页面,而不是重定向到另一个页面。进一步阅读:api dock- redirect_to