- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在将 Laravel 5.4 与 Dingo API 一起使用,并且我正在尝试让 Laravel 的 OAuth 2.0(通行证)处理内部 Dingo 请求。以前,我使用的是 JWT,但现在我想使用 OAuth。这是我之前的调度程序代码,它传递所需的 token 以对内部请求执行身份验证。
public function getDispatcher()
{
$token = JWTAuth::fromUser(Auth::user());
return $this->api->header('Authorization','Bearer'.$token)->be(Auth::user());
}
现在我正在使用 OAuth 进行身份验证,我的 JavaScript 代码设法通过 passing a cookie using this method 轻松获得身份验证在 JavaScript 中,效果完美。
现在我需要修改 getDispatcher()
方法以获取 Dingo 中“内部请求”的 OAuth token 。有没有人对如何执行此操作有任何提示?理论上我可以为每个用户创建一个个人访问 token ,但这对于内部请求来说似乎有点矫枉过正。任何建议或方法表示赞赏。如何在不通过完整的 OAuth 流程的情况下获取 OAuth token ,或者如何仅针对内部请求关闭身份验证。
根据以下答案更新:
'api.auth' 在路由上独立运行(仅 Dingo)并且内部请求有效。 auth:api (Passport) + api.auth 我得到了内部请求不允许的方法,它以 JSON 形式返回。 {"message":"405 Method Not Allowed"} 现在尝试调用内部 POST 请求时。 (当尝试 POST 到这些路由时,似乎发生了 301 重定向到登录页面,进而导致 API 路径以某种方式变成 GET,从而抛出 405 错误)。
通过 Postman 的 API 请求以相反的方式工作。当两者都处于事件状态时找不到用户 (['middleware' => ['auth:api','api.auth']) 当 (auth:api just Passport) 处于事件状态时它工作正常。
最佳答案
如果我没看错问题,看起来我们正在尝试同时使用两个身份验证提供程序——Dingo's 和 Passport。如果我误解了,请纠正我,但看起来我们实际上不需要在这个项目中同时使用两者。对于大多数应用程序,我们可以使用 Passport 进行身份验证,并将结果简单地传递给 Dingo。
我们通过创建一个 custom authentication provider 来实现这一点将 Dingo 与 Passport 执行的身份验证联系起来:
use Dingo\Api\Contract\Auth\Provider;
use Illuminate\Auth\AuthManager;
...
class PassportDingoAuthProvider implements Provider
{
protected $guard;
public function __construct(AuthManager $auth)
{
$this->guard = $auth->guard('api');
}
public function authenticate(Request $request, Route $route)
{
if ($this->guard->check()) {
return $this->guard->user();
}
throw new UnauthorizedHttpException('Not authenticated via Passport.');
}
}
如我们所见,上面显示的 Dingo 身份验证提供程序只是挂接到 Laravel 身份验证系统以在身份验证时转发 User
。构造函数中指定的'api'
守卫应该匹配守卫configured for Passport (我们通常在 config/auth.php 中的 'guards'
数组中添加一个 'api'
条目):
'guards' => [
...
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
然后,我们需要在 config/api.php 中向 Dingo 注册自定义提供程序:
'auth' =>
'passport' => App\Providers\PassportDingoAuthProvider::class
]
现在我们可以声明使用 Passport 身份验证中间件 (auth:api
) 和 Dingo 身份验证中间件 (api.auth
) 的 protected 路由:
$api->get('endpoint', function () { ... })->middleware('auth:api', 'api.auth');
我们可以创建一个 middleware group在 app/Http/Kernel.php 中,如果需要可以将它们结合起来:
protected $middlewareGroups = [
...
'auth:api-combined' => [
'auth:api', // Passport
'api.auth' // Dingo
]
];
当应用程序需要调用内部 API 时,客户端应该已经通过身份验证,因为典型的 Laravel 应用程序在中间件堆栈中处理身份验证。如您所知,如果需要,我们可以简单地将经过身份验证的 User
传递给 Dingo 端点:
return $this->api->be(auth()->user())->get('endpoint');
...但这对于上面显示的身份验证提供程序来说不是必需的。 Dingo 将从 Passport 的 auth guard 解析经过身份验证的用户。
这是a sample project结合了这些概念。
Now that I'm using OAuth to Authenticate, my Javascript code manages to get authentication simply by passing a cookie using this method in the Javascript...I need to modify the getDispatcher method to get the OAuth token on an 'Internal request' within Dingo.
当我们使用 CreateFreshApiToken
middleware , Laravel 即时生成加密的 JWT。我们可以手动创建这些 token 之一:
use Firebase\JWT\JWT; // installed with Passport
...
$token = JWT::encode([
'sub' => auth()->id(),
'csrf' => session()->token(),
'expiry' => Carbon::now()->addMinutes(config('session.lifetime')),
], app('encrypter')->getKey());
我们可以看出这不是标准的 OAuth 访问 token ——Passport 仅将这些用于 Web 请求。或者,我们可以从 JavaScript 传回的 cookie 中获取此值:
$token = request()->cookie(Passport::cookie());
但是,如果我们如上所述将 Dingo 与 Passport 集成,则不需要此 token 。
关于php - Laravel 5.4 OAuth 与 Dingo 内部请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383367/
laravel 在使用了 dingo API 后,错误信息被dingo异常类接管了,返回信息变成了 : 要返回自定义的错误信息,就需要再把错误异常类接管回来(大概这个意思...) 方法:
在最近的开发开发项目中,我使用了Dingo/Api这个第三方Api库。 Dingo是个很强大的Api库, 但在开发的过程中,需要自定义响应字段。 刚开始使用Ding/Api时,返回如下:
是否有一种优雅的方式来嵌套转换器以供关系使用?我希望构建一个允许集合有条件地包含关系模型的 REST 接口(interface)。到目前为止,我取得了一定的成功,但在涉及到变形金刚时似乎有点失败(我承
我正在尝试为 Lumen + Dingo Rest API 建立一个基本的工作基础,但我无法弄清楚和平是如何结合在一起的。 Lumen 工作正常,但当我尝试添加 Dingo 时,出现各种错误。来自Di
是否有一种简单的方法可以从 Dingo API 响应中删除“数据”信封。 当我使用这个 Transformer 来转换用户模型时: class UserTransformer extends Eloq
我一直在尝试使用 Laravel 5 Dingo API 包实现 REST API。 这是我的路由代码: $api->version('v1', function ($api) { $api
我刚刚安装了 Dingo,它似乎可以使用以下 URL: http://website.dev/api/test http://website.dev/api/hello $api = app('Din
我目前正在研究 Laravel 框架和 dingo api。有什么方法可以使用 entrust 将基于角色的权限集成到 dingo api 中吗? 例如,我有一个获取所有用户列表的路由,但只有管理员可
我一直在开发一组用于移动应用程序的 rest API。我正在遵循 Laravel 项目开发的存储库模式。我如何实现演示器和转换器,以便在我的所有 API 集合中格式化常量 JSON 输出? 例如我有以
我正在使用 Laravel 5 和 Dingo 构建 API。我如何捕获任何没有定义路由的请求?我希望我的 API 始终以特定格式的 JSON 响应进行响应。 例如,如果我有一条路线:$api->ge
我正在创建一组 REST API,以使用 laravel 存储库模式公开给我的移动应用程序。我正在使用 dingo 作为 REST 框架。我对如何使用转换器完成 API 的响应感到困惑。 我有以下 C
我正在使用 dingo/api包。 Controller : public function register(RegisterUserRequest $request) { dd('a');
我们的 Eloquent 模型具有遵循 Laravel snake case 约定的属性。 例如first_name、last_name 和 created_at 尽管我的前端(react)遵循 ja
我正在将 Laravel 5.4 与 Dingo API 一起使用,并且我正在尝试让 Laravel 的 OAuth 2.0(通行证)处理内部 Dingo 请求。以前,我使用的是 JWT,但现在我想使
关闭。 这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年
我将 Dingo 与 Laravel 5.1 结合使用来创建简单的 API。 所以在 route.php 我有: $api = app('Dingo\Api\Routing\Router'); $ap
我正在尝试确定是否可以将常规的 Laravel 身份验证路由与 Blade / View 一起用于基本身份验证,然后加载 SPA(Vue.js 及其自己的路由器)并通过 Dingo 调用 API? 目
考虑: 现在我收到此错误。我该如何解决这个问题? 我发现一些相关的问题,但这告诉我更改文件php.ini内的max-size,那么我如何编辑文件php.ini (phpmyadmin-config)?
我正在尝试使用 laravel 5.2 实现 dingo API 下面是我写的测试dingo的函数 public function profile() { try { $use
我已经在 laravel 5.1 中配置了 dingo 包,但是当我尝试访问时 http://localhost:8000/test 显示以下错误 {"message":"404 Not Found"
我是一名优秀的程序员,十分优秀!