使用 Passport 和 React 进行 Laravel API 身份验证

标签 laravel reactjs laravel-passport

我有一个 Laravel 5.5 应用程序,它使用开箱即用的基于 session 的身份验证。在其中一些页面上,我有需要从 API 获取数据/向 API 发布数据的 React 组件。

处理此问题的最佳做法是什么?我是否只是将 API 端点隐藏在身份验证后面?这可行,但我应该使用 Laravel Passport 来代替吗?

我玩过 Passport,似乎这可行,但我不需要用户能够创建客户端并授予第 3 方应用程序权限等。只有第一方 react 应用程序消耗数据从 Laravel 应用程序内部( View )。

从我最初的尝试来看,我似乎需要先进行登录调用才能接收访问 token ,然后再进行进一步的调用。由于用户已经在 session 中进行了身份验证,是否有更简单的方法?

我不确定 Passport 是否打算用于此目的。我宁愿花时间立即获取它,因为如果应用程序可扩展,我希望立即获取基础。

最佳答案

您可以使用 Passport 代理身份验证。使用密码授予类型的用户仍将使用其用户名/密码登录,然后在幕后向 Passport 发出内部请求以获取访问 token 。

通过传入以下参数来限制注册服务提供商时可用的路由:

Passport::routes(function ($router) {
    $router->forAccessTokens();
    $router->forTransientTokens();
});

这仅限制对个人 token 和刷新 token 的访问。当您运行 php artisan Passport:install 时将创建一个客户端。

设置一个中间件,将密码授予客户端 ID 和 key 合并到请求中,然后调用授权端点。然后,只需返回加密 token 并观察 api 请求的授权 header 即可。

关于使用 Passport 和 React 进行 Laravel API 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48645785/

相关文章:

Laravel Passport 错误 - RequestException.php 第 107 行中的 ServerException

php - Laravel 8 - 当 Controller 不存在时显示自定义的 404 Blade 页面

php - 我可以在 laravel 查询生成器中同时使用 `join` 和 `with` 吗?

php - Laravel Gmail 不工作, "Username and Password not accepted. Learn more..."

javascript - 如何将带有 href 属性的元素与 React-router 结合使用?

javascript - react-bootstrap-table - 自己的分页项目数

php - Laravel 错误 : Call to a member function format() on string

javascript - 如何使用refs触发react-dropzone-component的打开功能?

php - API 中的 Laravel 策略总是 403 未经授权

php - Laravel Passport 路由重定向到登录页面