标签: laravel-passport

使用 Passport 的 Laravel API 身份验证导致 401(未经授权)

按照 Laravel 上有关 API 路由Passport 身份验证的文档,我目前在使用 axois 从 api 获取数据时遇到一些问题。

到目前为止,我已经通过 Composer 安装了 Passport,添加了 hasApiTokens 特征,在 AuthServiceProvider 的 boot 方法中添加了对 Passport::routes 的调用,并将 api 身份验证防护的驱动程序选项设置为“passport”。

由于我希望用户在登录后通过 Javascript 从基于 Vue 的 SPA 使用 API,因此我已将 CreateFreshApiToken 添加到 Web 中间件组。

当我运行以下代码片段来测试所有内容时,就会出现问题:

axios.get('api/users').then( function(response) { console.log(response.data); }); 
Run Code Online (Sandbox Code Playgroud)

结果是“无法加载资源:服务器响应状态为 401(未经授权) ”响应。

我已经检查了使用 axois 发送的请求的标头,并且标头包含两者

Cookie:laravel_token=eyJpdiI6ImJ5RG1KRk...

X-XSRF-令牌:eyJpdiI6IlVRRHhxSXp2VDVy...

我做错了什么吗?

php authentication api laravel laravel-passport

2
推荐指数
1
解决办法
3万
查看次数

直接从代码调用 AccessTokenController.issueToken()

我正在使用 Laravel Passport 来保护我的 REST API。目前,我使用 创建个人访问令牌$user->createToken('APP_NAME')->accessToken,但这些令牌没有过期日期。所以我想创建一个密码访问令牌。我注意到,这些是由该AccessTokenController.issueToken()方法生成的。

但我找不到任何关于如何称呼它的信息。


我目前的解决方案

$input = $request->all();

$user = User::where('email', $input['email'])->first();

if ($user) {
    if ($input['password'] == $user->password) {
        $token = $user->createToken($this->app_name)->accessToken;
        return [
            'token' => $token,
            'user' => $user
        ];
    } else
        return new ResponseGeneratorError('Password mismatch', 400);
} else
    return new ResponseGeneratorError('User does not exist', 400);
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-passport

2
推荐指数
1
解决办法
3428
查看次数

Laravel Passport Auth Stuck when run on standalone project for password based token authentication

Laravel Passport Auth Stuck when run on self server and client in same project for password based token authentication

LoginController

public function authenticaterrr(Request $request)

{
     $http = new Client();

    try{
                //dd("Hello");

        $response = $http->post(url('oauth/token'), [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => '2',
            'client_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
            // 'username' => $request->get('username'),
            // 'password' => $request->get('password'),
              'username' => 'xxxxxx@xxxxx.com',
                'password' => 'xxxxx',
            'scope'     => '*',
         ],
         ]);

       //  $apiResponse = json_decode((string) $response->getBody(), true);

       // dd($apiResponse);
         $apiResponse = json_decode((string) $response->getBody(), true);

        dd($apiResponse); …
Run Code Online (Sandbox Code Playgroud)

php oauth-2.0 laravel laravel-5 laravel-passport

2
推荐指数
1
解决办法
3263
查看次数

身份验证和访客用户的单一 API 使用

我在 routes/api.php 上配置的 Laravel 应用程序路由是。

<?php
use Illuminate\Http\Request;
Route::post('see_all_product',  'API\ProductController@see_all_product');
?>
Run Code Online (Sandbox Code Playgroud)

问题是我想发送产品列表,但如果用户通过身份验证,则发送产品收藏标志 1,如果未通过身份验证,则发送返回收藏夹 0

但是两种情况都发送带有最喜欢标志的产品列表。

如果我使用我的用户 ID 和密码登录并发送对see_all_product 的请求,那么我将获得空白用户。

$user = $request->user();
Run Code Online (Sandbox Code Playgroud)

但是,如果我设置如下路线,我将获取用户详细信息。

<?php
use Illuminate\Http\Request;
Route::group(['middleware' => 'auth:api'], function(){
        Route::post('see_all_product',  'API\ProductController@see_all_product');
});
?>
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果在具有相同 api 的标头中设置了授权,我如何获取详细信息。

<?php
use Illuminate\Http\Request;
Route::post('see_all_product',  'API\ProductController@see_all_product');
?>
Run Code Online (Sandbox Code Playgroud)

我的see_all_product功能

public function see_all_product(Request $request){ 
    try { 
        $user = $request->user(); 
    } catch (Exception $ex) { 
        Log::error($ex); 
    }
}
Run Code Online (Sandbox Code Playgroud)

API 对于经过身份验证的用户和来宾用户都是相同的。

我在这两种情况下都传递了授权令牌,但中间件路由我得到了用户详细信息,但非中间件路由我没有得到用户信息。

请指导我在哪里可以错过什么?

laravel laravel-5 laravel-passport

2
推荐指数
1
解决办法
1964
查看次数

Log in on 3rd party website using Laravel Passport

I need to solve the following problem: I created two applications using Laravel.

  • Application A can be reached via https://test.example.org and provides a passport-instance and all user-data (Model: User).
  • Application B can be reached via https://test.org and uses the API Application A provides using an "api-user" that exists in Application A to fetch "public" data

Now I would like to provide a login method for users of Application B. All users that are using Application B are existing …

laravel laravel-passport laravel-6 laravel-6.2

2
推荐指数
1
解决办法
1028
查看次数

Laravel Passport 以编程方式创建客户端

有没有办法从 Laravel 中的用户界面创建客户端?如果我需要允许用户创建和管理自己的客户端,如何在函数上下文中运行“passport:client”以便动态创建客户端?

我尝试制作 OauthClient 模型并实现生成客户端的表单,但如此创建的客户端在请求中无法识别(它们是 40 个字符的随机字符串)。

client oauth laravel laravel-passport

2
推荐指数
1
解决办法
2949
查看次数

Laravel:如何在没有中间件的情况下检查 API 路由的用户身份验证('auth:api')

我如何检查当前用户从控制器访问方法是否经过身份验证,相关 API 路由不受任何身份验证中间保护,因为该路由可供公众和访客用户访问,我检查了我的请求标头不记名令牌正在通过,我正在为我的路线使用反应路由器。api驱动程序是passport

公共路线

Route::get('product/list', 'ProductController@index')

尝试过什么

  1. 将默认的 AUTH Guard 更改为api

  2. Auth()->guard('api')->check()尝试在控制器方法中显式调用。

    if (Auth()->guard('api')->check()) {
          return 'is_favourite';
    } else {
          return 'unauthenticated';
    }
Run Code Online (Sandbox Code Playgroud)
  1. 也这样称呼它Auth()->check()
    if (Auth()->check()) {
          return 'is_favourite';
    } else {
          return 'unauthenticated';
    }
Run Code Online (Sandbox Code Playgroud)

结果

总是'unauthenticated'

预期结果:is_favourite在标头中传递承载令牌时的结果,如果未提供承载令牌,则为“未经身份验证”。

laravel laravel-passport laravel-api laravel-7

2
推荐指数
1
解决办法
2285
查看次数

Laravel 9 - 无法使用护照生成令牌

以下是我在 laravel 9 项目中的登录功能。我正在尝试通过创建身份验证令牌laravel-passport

public function login(Request $request) {
    $user = User::where('email', $request->email)->first();
    if ($user) {
        if (Hash::check($request->password, $user->password)) {
            $token = $user->createToken('Laravel Password Grant Client')->accessToken;
            $response['token'] = $token;
            return response($response, 200);
        } else {
            $response = ["message" => "Password mismatch"];
      

      return response($response, 422);
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

我得到的回应是,

{
    "token": {
        "name": "Laravel Password Grant Client",
        "abilities": [
            "*"
        ],
        "tokenable_id": 1,
        "tokenable_type": "App\\Models\\User",
        "updated_at": "2022-07-04T05:58:36.000000Z",
        "created_at": "2022-07-04T05:58:36.000000Z",
        "id": 62
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里没有得到任何令牌。请帮我解决这个问题。

authentication laravel laravel-passport laravel-9

2
推荐指数
1
解决办法
2252
查看次数

Laravel Passport-通过客户端ID获取客户端密码

我有来自oauth_clients 的client_id,需要获取秘密。由于secret属性是受保护的,因此无法进行常规的Model查询或DB查询。

php laravel laravel-passport

1
推荐指数
1
解决办法
3211
查看次数

Laravel Passport:API的令牌存储在服务器上吗?在哪里?

我试图找到该方法返回的令牌$user->createToken('MyApp')->accessToken;存储在数据库中的位置,但似乎找不到。它首先存储在服务器中吗?如果是这样,在哪里?

如果由于它是独立的而未存储在服务器上,那么Laravel的开发人员为什么要进行$table->rememberToken();默认create_users_table.php迁移?专栏的目的是remember_token什么?

谢谢您的帮助。

php token jwt laravel laravel-passport

1
推荐指数
1
解决办法
2458
查看次数