【问题标题】:How do I get the current user's id in this Laravel 8 and Auth0 API?如何在这个 Laravel 8 和 Auth0 API 中获取当前用户的 ID?
【发布时间】:2022-02-02 03:43:47
【问题描述】:

我正在开发 Laravel 8 API。我使用 Auth0 进行用户注册和登录。

在注册时,我需要 Auth0 返回的用户 ID(如 user_id),以便将其插入到我自己的 users 表中,位于名为 uid 的列中。

另外,一旦用户登录,我需要在myapp.test/api/user-profile/show/ 显示用户的数据,为此我还需要user_id

为此,我有代码:

routes\api.php

Route::get('/authorization', [UserController::class, 'authorize']);

用户控制器中:

public function authorize(){

    $appDomain = 'https://' . config('laravel-auth0.domain');
    $appClientId = config('laravel-auth0.client_id');
    $appClientSecret = config('laravel-auth0.client_secret');
    $appAudience = config('laravel-auth0.api_identifier');

    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => "$appDomain/oauth/token",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => "{\"client_id\":\"$appClientId\",\"client_secret\":\"$appClientSecret\",\"audience\":\"$appAudience\",\"grant_type\":\"client_credentials\"}",
        CURLOPT_HTTPHEADER => array(
            "content-type: application/json"
        ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
        return "cURL Error #:" . $err;
    } else {
        return $response;
    }
}

问题

authorize() 方法(取自 Auth0 网站上的教程)仅返回 access_token 信息,但返回 user_id

问题

  1. 如何获取当前用户的user_id?
  2. 我想我需要用一些东西代替 CURLOPT_URL => "$appDomain/oauth/token",而不是用什么

【问题讨论】:

标签: php laravel laravel-8 auth0


【解决方案1】:

请看这个社区的回答:

https://community.auth0.com/t/how-to-get-user-information-from-the-laravel-api-side/47021/3

向 Authentication API 的 userinfo 端点发出请求以获取用户的个人资料。 https://auth0.com/docs/api/authentication#user-profile

【讨论】:

  • 哪些端点看起来相关?
  • 我已将CURLOPT_URL => "$this->appDomain/oauth/token" 替换为CURLOPT_URL => "$this->appDomain/userinfo",但是,这是一个问题:我从邮递员那里得到Unauthorized,即使其他受保护的路线都可以访问。
  • @RazvanZamfir endpoint /userinfo 但您还必须添加标头 Authorization: Bearer with token,在调用 authorize() 方法后您将收到它,并且使用 Guzzle 更容易
  • 如何使用 Guzzle?
  • 请帮助我 this question。谢谢!
【解决方案2】:

获取当前登录用户的ID,您可以使用 使用身份验证; $user_id = Auth::user()->id ;

它将为您的 id 提供当前登录用户 id。但如果您需要完整的登录用户信息,那么您可以使用

$user = Auth::user() ;

【讨论】:

  • 我需要来自 Auth0 的 user_id,而不是 Laravel。
猜你喜欢
  • 2021-06-08
  • 2018-11-09
  • 2017-01-21
  • 2018-01-13
  • 1970-01-01
  • 2018-07-03
  • 2019-12-28
  • 1970-01-01
  • 2015-06-01
相关资源
最近更新 更多