我正在使用devise并尝试下一个:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :is_worker
def is_worker
if user_signed_in?
@email = current_user.email
if @email && Worker.find_by_email(@email).nil?
redirect_to '/tasksadmins'
else
redirect_to '/workers'
end
else
redirect_to '/users/sign_in'
end
end
end
Run Code Online (Sandbox Code Playgroud)
当我尝试进入网站时:localhost:3000/tasksadmins我得到了:
Oops! It was not possible to show this website
The website at http://localhost:3000/tasksadmins seems to be unavailable. The precise error was:
Too many redirects
It could be temporarily switched off or moved to a new address. Don't forget to check that your internet connection is working correctly.
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
before_filter适用于每个请求.这就是为什么它一次又一次地重定向.
您可能只想过滤特定操作:
before_filter :is_worker, only: :index
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是检查是否需要重定向#is_worker:
redirect_to '/workers' unless request.fullpath == '/workers'
Run Code Online (Sandbox Code Playgroud)
编辑:
另一种方法是跳过重定向目标操作的前置过滤器.例:
class WorkersController < ApplicationController
skip_before_filter :is_worker, only: :index
# …
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7103 次 |
| 最近记录: |