我正在使用 laravel 5.5 和 API 路由的护照身份验证。我正在使用不记名令牌。问题是旧生成的令牌被接受而不是未经身份验证。脚步 :
有什么办法可以实现这一目标吗?提前致谢。
我一直在研究使用Passport允许对我的Laravel App进行api访问。我已经使用Laravel文档中的标准教程成功实现了它。
我不想要本教程中描述的oauth管理屏幕,我只想能够使用该应用程序注册用户并让它自动为该用户创建所需的令牌。
这有可能吗,有人能给我一个例子吗?
我正在尝试使用api authentication token. 但即使在使用正确的令牌后,它的说法未经授权。
我使用 laravel auth 和 socialite 进行社交认证,所以我的api.php路线是这样的
Route::group(['middleware'=>'auth:api'], function(){
Route::get('hello','ApiTestControler@index');
});
Run Code Online (Sandbox Code Playgroud)
我试图用这个网址访问这个
http://localhost:8000/api/hello
并在标题中
token: TOKEN HERE
Content-Type: application/json
Accept: application/json
Run Code Online (Sandbox Code Playgroud)
我期待它让我登录并显示 ApiTestController index methord
但它抛出一个错误401 unauthorized
我如何解决这个问题并使用 API 令牌获取用户身份验证?
我的控制器
class ApiTestController extends Controller
{
public function index(){
return json_encode ("Welcome REST API");
}
}
Run Code Online (Sandbox Code Playgroud)
用户迁移表
$table->increments('id');
$table->string('name')->unique();
$table->string('first_name')->nullable();
$table->string('last_name')->nullable();
$table->string('email')->unique()->nullable();
$table->string('password');
$table->rememberToken();
$table->boolean('activated')->default(false);
$table->string('token');
$table->ipAddress('signup_ip_address')->nullable();
$table->ipAddress('signup_confirmation_ip_address')->nullable();
$table->ipAddress('signup_sm_ip_address')->nullable();
$table->ipAddress('admin_ip_address')->nullable();
$table->ipAddress('updated_ip_address')->nullable();
$table->ipAddress('deleted_ip_address')->nullable();
$table->timestamps();
$table->softDeletes();
Run Code Online (Sandbox Code Playgroud)
和身份验证配置 config\auth.php
'guards' => [
'web' => [ …Run Code Online (Sandbox Code Playgroud) authentication oauth-2.0 laravel-5 laravel-socialite laravel-passport
在我的本地机器和域http://myapp.test上使用 laravel 护照,我没有问题。
当我将代码推送到我的主域https://myapp.com上的服务器时,再次没问题。
但是,在推送到生产中的主域之前,我有一个 sudomain 用于我的实时测试(预生产)。如果我使用https://dev.myapp.com,则会收到 500 内部服务器错误。
知道如何修复它吗?
这是我正在做的狂饮电话:
$http = new GuzzleHttp\Client;
$response = $http->post('https://dev.myapp.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => 'client_id',
'client_secret' => 'client_secret_key',
'username' => 'john@example.com',
'password' => '123456',
'scope' => '',
],
]);
return $response;
Run Code Online (Sandbox Code Playgroud)
如果我将 url 更改为我的本地或生产网站(更改护照密钥并确保存在相同的用户),它可以正常工作。
所以我想对我的 API 端点进行单元测试。我正在使用 Laravel 5.8 并且使用 Passport 完成 api 身份验证我有以下测试:
public function guest_can_login()
{
$user = factory(User::class)->create();
$response = $this->json('POST', 'api/login', [
'email' => $user->email,
'password' => 'secret',
]);
$response
->assertStatus(200)
->assertJson([
'success' => true,
]);
}
Run Code Online (Sandbox Code Playgroud)
当我使用 Postman 执行请求时,它运行良好,对用户进行身份验证并返回一个令牌,但是当我启动测试时它失败了(“预期状态代码 200,但收到 500。”)
所以我在回复中更深入地搜索,我发现了这个:
"message": "未找到个人访问客户端。请创建一个。"
不知道为什么会发生这种情况,如果有人对此有所了解
编辑:固定见下面我的最后一个答案
我使用 Laravel Passport 进行 API 身份验证。我已经设置了密码凭据授予并且它有效。现在我需要一个 Client Credentials Grant 来进行机器对机器的身份验证。
我创建了一个新客户端
php artisan passport:client --client。我试图用这个身体(失眠)向 /oauth/token 发出请求:
{
"client_id":3,
"secret":"wJWuVVydkHIQQ6gC7xvd0eEKytIFAD3pa149e6TR",
"grant_type":"client_credentials"
}
Run Code Online (Sandbox Code Playgroud)
这是我从 Passport 得到的回应:
{
"error": "invalid_client",
"error_description": "Client authentication failed",
"message": "Client authentication failed"
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么它是无效客户端?
这是我客户端的 oauth_clients 表中的条目,导出为 json:
{
"id":"3",
"user_id":null,
"name":"ClientCredentials Grant Client",
"secret":"wJWuVVydkHIQQ6gC7xvd0eEKytIFAD3pa149e6TR",
"redirect":"",
"personal_access_client":"0",
"password_client":"0",
"revoked":"0",
"created_at":"2019-04-30 17:06:17",
"updated_at":"2019-04-30 17:06:17"
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过以下方式生成令牌以对我的控制器中的用户进行身份验证:
namespace App\Http\Controllers\API;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
class AuthController extends Controller
{
public function login()
{
if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
$user = Auth::user();
$success['token'] = $user->createToken('myApp')->accessToken;
dd($success['token']);
}
}
Run Code Online (Sandbox Code Playgroud)
目前,我只是想打印出令牌。这是我的用户模型:
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
//use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Hash;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
const USER_FIRST_NAME_FIELD = "first_name";
const USER_LAST_NAME_FIELD = "last_name";
const USER_PREFERRED_NAME_FIELD = "preferred_name";
const USER_EMAIL_FIELD = "email";
const …Run Code Online (Sandbox Code Playgroud) php laravel eloquent laravel-passport laravel-authentication
我使用Laravel 6.7 和 Passport来使用我自己的 API。当我尝试使用 注销用户时Auth::logout(),出现以下错误:
Illuminate\Auth\RequestGuard::logout 不存在。
我不明白为什么我会有这样的行为。我没有使用任何定制的守卫。根据 Passport 设置,我的Auth.php如下:
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
Run Code Online (Sandbox Code Playgroud)
这是我的 AuthenticationController.php 注销代码所在的位置:
/**
* --------------------------------------------------
* Removes the identity of a users login session.
* --------------------------------------------------
* @param Request $request
* @return MessageResource
* -------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 我正在使用 laravel 7.x 版本。我想安装 Laravel 护照。但是当我输入composer require laravel/passport时出现错误。* 使用版本 ^8.1 for laravel/framework ./composer.json 已更新 使用包信息加载 composer 存储库 更新依赖项(包括 require-dev) 您的需求无法解析为一组可安装的包。
问题 1 - 结论:不要安装 laravel/framework v8.1.0 - laravel/ui v2.4.0 需要照明/支持 ^7.0 -> 满足 laravel/framework[v7.28.1],illumination/support[7.x-dev , v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7 .1.3、v7.10.0、v7.10.1、v7.10.2、v7.10.3、v7.11.0、v7.12.0、v7.13.0、v7.14.0、v7.14.1、v7.15.0、v7.16.0、v7.16.16 , v7.17.0, v7.17.1, v7.17.2, v7.18.0, v7.19.0, v7.19.1, v7.2.0, v7.2.1, v7.2.2, v7.20.0, v7.21.0, v7.22.0, v7 .22.1、v7.22.2、v7.22.3、v7.22.4、v7.23.0、v7.23.1、v7.23.2、v7.24.0、v7.25.0、v7.26.0、v7.26.1、v7.27.0、v7.27.0.07 , v7.28.1, v7.3.0, v7.4.0, v7.5.0, v7.5.1, v7.5.2, v7.6.0, v7.6.1, v7.6.2, v7.7.0, v7.7.1, v7.8.0, v7 …
我们有一个与 laravel/passport 相关的新错误:7.5.1。今天,这个图书馆已经像上周一样工作了。但这停止通过邮递员显示此消息:
不推荐将声明复制为标头,并将从 v4.0 中删除。如果您需要复制标题,请手动设置标题。
有人知道这个问题吗?
我们不知道如何继续这个......
我们正在使用 Laravel 5.7(我们知道......)
laravel-passport ×10
laravel ×8
laravel-5 ×3
oauth-2.0 ×3
php ×2
api ×1
eloquent ×1
laravel-5.7 ×1
laravel-5.8 ×1
laravel-6.2 ×1
oauth ×1
phpunit ×1