我正在使用 Laravel 5.6 和 vue.js2 开发应用程序。我使用 Laravel Passport 作为 API 进行用户身份验证。我route在api.phpLaravel 中对此一无所知。我在vue.js.
methods: {
login() {
var data = {
client_id: 2,
client_secret: 'ispGH4SmkEeV4i5Tz9NoI0RSzid5mciG5ecw011f',
grant_type: 'password',
username: this.email,
password: this.password
}
this.$http.post('http://127.0.0.1:8000/oauth/token',data)
.then( response => {
this.$auth.setToken(response.body.access_token, response.body.expires_in + Date.now())
this.$router.push('dashboard')
})
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想获取认证的用户的细节,如userName,email等。
我已经使用 Laravel Passport 安装设置了一个新的 Laravel 5.6 安装。如果我使用 Postman向http://127.0.0.1/oauth/token发出帖子请求,我会得到一个有效的令牌:
要求
POST /oauth/token HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Cache-Control: no-cache
Postman-Token: 99529c07-0fe3-38a8-54cf-8b80a9dd5fbd
{
"grant_type" : "password",
"client_id" : 4,
"client_secret" : "Ib1UOS7BK12tFxOilqwea1XGJhrExbVYe8B7r8wK",
"username" : "mail@mail.com",
"password" : "password"
}
Run Code Online (Sandbox Code Playgroud)
回复:
{
"token_type": "Bearer",
"expires_in": 31536000,
"access_token": "eyJ0eXAiOiJKV1.....",
"refresh_token": "def5020026dfeb6f91f6a9....."
}
Run Code Online (Sandbox Code Playgroud)
我不希望我的用户直接访问它,所以我在 routes/web.php 文件中设置了一个路由:
Route::post('login', 'API\AuthController@login');
Run Code Online (Sandbox Code Playgroud)
我的 AuthController 看起来像:
<?php
namespace App\Http\Controllers\API;
use App\OAuth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller as Controller;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use App\User;
class AuthController extends …Run Code Online (Sandbox Code Playgroud) 我的设置如下:我有一个用 Vue.js 编写的前端,一个 Laravel 5.6 中的 API 和 AWS 上的基础设施。一切都在 docker 容器中运行。我们在前端和 API 之间有 4 个 API 容器和一个负载均衡器。身份验证适用于 Laravel Passport v5 和不记名令牌。
基本上一切正常,身份验证成功。
但是,当我们部署新版本的 API 时,会遇到以下情况:2 个 API 实例的版本为 1,其他 2 个 API 实例的版本为 2。这是有意的,因为我们希望持续部署而不会停机。一段时间后,2 个 v1 实例也被新的 v2 实例替换。所有实例都使用相同的数据库。
不幸的是,在此时间段内,身份验证不再起作用。似乎前端使用正确的新令牌向 API 发出了一些请求。负载均衡器将一些请求分发到 v1 实例,一些分发到 v2 实例。对 v2 实例的请求成功,对 v1 实例的请求不成功(401 未授权)。
我的问题:护照如何验证不记名令牌?为什么 v1 实例不能验证 v2 实例生成的令牌,反之亦然?即使它们都使用相同的数据库,我可以监督哪些实例和影响通行证之间的差异?
我第一次使用 Passport laravel,但我仍然不太明白 midlewareare auth:api 和 client:credentials (CheckClientCredentials) 之间的区别,这两种类型的中间件不限制路由吗?它们之间有什么区别?
我是网络服务的初学者。我必须使用 Laravel 为移动应用程序制作 API。在 Laravel 文档中,我有API Authentication (Passport)。我试图理解这一点,但不清楚。
谁能详细告诉我一下?
提前致谢
我已经使用 Laravel Passport 实现了 OAuth 系统,但该系统的登录和所有身份验证均由具有 Inertia 的 Laravel Jetstream 处理。
当我想要请求代码(使用授权代码授予)时,我的应用程序将我重定向到我的 OAuth 服务器,该服务器在继续之前要求我登录,此屏幕是 Laravel Jetstream 使用 Inertia (Vue) 登录生成的屏幕。当我登录时,它会将我重定向到授权页面,但是这个重定向很奇怪,因为该页面显示在 Vue(惯性)页面内,浏览器中的 URL 不会更新,并且如果我接受授权请求它将我重定向回我的应用程序,但重定向位于同一个 Vue 页面内,我的意思是,URL 与我的 OAuth 服务器登录名相同,但视图是请求代码的应用程序。
我认为 Vue 中的重定向存在问题,因为授权页面没有使用 Inertia(Laravel Passport 的默认授权页面),而且我不知道如何修复它,你能帮我吗?
这是一张图片:
正如你所看到的,它似乎是在模态中,但是是一个惯性错误页面,里面显示的是授权页面,是一个重定向错误,我不知道如何修复