【问题标题】:Devise: after_sign_in_path_for(resource) not working设计:after_sign_in_path_for(resource) 不工作
【发布时间】:2013-05-27 04:06:20
【问题描述】:

我正在使用用户注册/登录的设计。但是当用户从公共可访问页面登录时,设计重定向到 root_path。

我试过用这个:

def after_sign_in_path_for(resource)
 request.referrer
end

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

谁能告诉我怎么做?

【问题讨论】:

    标签: devise ruby-on-rails-3.2


    【解决方案1】:

    我相信如果我是对的,您想要做的是在用户登录时覆盖重定向是在 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 角色是否是管理员。如果他们然后他们被重定向到仪表板页面。如果不是,那么它们将被重定向到列表页面。

    或者,设计助手声明您也可以执行以下操作:

          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

    【讨论】:

    • 什么是 publisher_url?如果将其替换为“request.referrer”,则会给出错误“页面未正确重定向”。如何将用户重定向到后台?
    • @user2206724 你在哪里做这个def after_sign_in_path_for(resource) 这是在controllers/devise/session_controller.rb 里面。此外,publisher_url 只是devise_helper.rb 展示的一个示例。
    • 我正在定义它应用程序控制器,如果我将 request.referrer 替换为任何其他定义的路径,它就可以工作。但我不想定义路径,我希望它重定向到后/上一页。
    • @user2206724 好的,我相信您想要的是 redirect_to 返回发出请求的页面。一般情况下你可以使用redirect_to :back我给你举个例子
    • @user2206724 查看更新并阅读stackoverflow.com/questions/2139996/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多