您好我正在为应用构建api部分。我的所有与api相关的控制器都位于app/controllers/api
目录中。
我担心的是application_controller
中有一个过滤器before_action
:authenticate_user!
,所以我必须处于登录模式才能访问api。
我当前的解决方案:我在所有控制器中添加skip_before_action :authenticate_user!
app/controllers/api
目录..
问题:我必须写入所有控制器,我有大约80个控制器
我的期望:有没有办法我可以在application_controller
写这样的东西
before_action:authenticate_user !,除了:[all the controllers which are in api directory
]
答案 0 :(得分:17)
您必须在每个应该对其操作进行身份验证的控制器中指定skip_before_action
。您不能将控制器的名称或任何类似的东西作为参数传递给APIController
方法。
一个解决方案是:你可以创建一个名为skip_before_action
的控制器,你可以指定class APIController < ApplicationController
skip_before_action :authenticate_user!
# rest of the code
end
之类的东西:
app/controllers/api/
然后APIController
的所有控制器都可以继承class OtherController < APIController
end
。
ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(
(Activity) context,
new Pair<View, String>(view.findViewById(R.id.iv_content),
ArtDetailAdapter.VIEW_NAME_HEADER_IMAGE),
new Pair<View, String>(view.findViewById(R.id.tv_art_name),
ArtDetailAdapter.VIEW_NAME_HEADER_IMAGE_NAME));
ActivityCompat.startActivity((Activity) context, intent, activityOptions.toBundle());
答案 1 :(得分:2)
如果所有控制器都在API文件夹下,您可以尝试这样做:
class ApplicationController < ActionController::Base
before_action :authenticate!
def authenticate!
if params[:controller].split("/").first == "api"
return true # or put code for what wherever authenticate you use for api
else
authenticate_user!
end
end
end