我正在研究应该表现为API端点的模块。
我创建了Controller,该处理程序从外部系统发送和获取请求,但我需要添加用户身份验证,以便只有经过身份验证的用户才能访问这些端点。
我的mymodule.routing.yml:
mymodule.show_content:
path: 'api/getContent'
defaults:
_controller: '\Drupal\mymodule\Controller\ContentController::getContent'
_format: hal_json
requirements:
_method: 'POST'
_custom_access_check: 'TRUE'我的mymodule/src/Access/CustomAccessCheck.php:
class CustomAccessCheck implements AccessInterface
{
public function access(AccountInterface $account)
{
return ($account->hasPermission('access content')) ? AccessResult::allowed() : AccessResult::forbidden();
}
}Mymodule.services.yml:
mymodule.custom_access_check:
class: Drupal\mymodule\Access\CustomAccessCheck
arguments: ['@current_user']
tags:
- { name: access_check, applies_to: _custom_access_check }我用REST角色创建了一个名为REST的用户。我给了他“访问内容”的许可,并试图使用POST方法和以下标题向邮递员提出请求:
{
Content-Type: application/hal+json,
Authorization: Basic
X-CSRF-Token: token obtained from /rest/session/token
}当我向admin用户提出请求时,我在最近的日志中看到管理访问路由/api/getContent,但是访问被拒绝。当我使用REST用户时,它会以匿名用户的身份登录。即使当我在CustomAccessCheck::access函数中记录身份验证状态时,我也看到该用户已通过TRUE进行身份验证。
我需要将此身份验证隔离开来(在控制器之外、服务中或其他方面),因为我需要对每个请求进行身份验证(重用auth),这样只有内部用户才能使用API (而不是使用URL的每个人)。我不明白缺少了什么,为什么只有我的管理用户被drupal所识别,而其余的用户不被识别。
发布于 2019-03-29 12:48:18
如果您替换:
requirements:
_method: 'POST'
_custom_access_check: 'TRUE'通过以下方式:
requirements:
_method: 'POST'
_permission: 'access content'然后删除CustomAccessCheck代码
https://drupal.stackexchange.com/questions/278160
复制相似问题