【问题标题】:How can retrive current user id on Laravel 8 api controller?如何在 Laravel 8 api 控制器中检索当前用户 ID?
【发布时间】:2021-06-08 17:27:49
【问题描述】:

我到处寻找解决方案,问题是我需要在我的 api 控制器中当前用户登录的 id。在 api 控制器中,我放置了中间件 api。 这是ApiController.php的代码:

 public function __construct()
{
    $this->middleware('auth:api');
}
public function createcorso(Request $request)
{

    $corsoscii = new CorsoScii();

    $corsoscii->tipo = $request->input('tipo');
    $corsoscii->nome = $request->input('nome');
    $corsoscii->membriMax = $request->input('membriMax');
    $corsoscii->orario_inizio = $request->input('orario_inizio');
    $corsoscii->orario_fine = $request->input('orario_fine');
    $corsoscii->inizio = $request->input('inizio');
    $corsoscii->fine = $request->input('fine');

    $corsoscii->save();

    $idUtente =  $request->user('api')->id;  
    $idCorso = CorsoScii::latest()->first();
    DB::table('iscrizione')->insert(
        array('idUtente' => $idUtente, 'idCorso' => $idCorso)
    );
    return response()->json($corsoscii);
}

这是 api.php 路由:

Auth::routes();

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});


//Operazioni di gestione e creazione corso scii per maestri
Route::post('/tipo', [App\Http\Controllers\ApiController::class, 'createtipo']);
Route::post('/corso', [App\Http\Controllers\ApiController::class, 'createcorso']);
Route::get('/mostracorsi', [App\Http\Controllers\ApiController::class, 'mostracorsi']);
Route::get('/mostracorso/{idCorso}', [App\Http\Controllers\ApiController::class, 'mostracorso']);
Route::put('/updatecorso/{idCorso}', [App\Http\Controllers\ApiController::class, 'updatecorso']);
Route::delete('/deletecorso/{idCorso}', [App\Http\Controllers\ApiController::class, 'deletecorso']);

//Operazioni di gestione prenotazioni ed iscrizioni per clienti impianto scii
Route::post('/iscrizione', [App\Http\Controllers\ApiController::class, 'iscrizione']);
Route::get('/vedicorso/{idCorso}', [App\Http\Controllers\ApiController::class, 'vedicorso']);
Route::delete('/deleteiscrizione/{idUtente}', [App\Http\Controllers\ApiController::class, 'deleteiscrizione']);

Auth::routes();

当我尝试在表单上插入数据时,它给了我这个错误:

即使不是真的,用户也未经过身份验证。可能是中间件配置有问题。

【问题讨论】:

  • 您的函数createcorso 未到达,因为您是Unathorized。您必须先提供正确的凭据。
  • 在 API 的情况下,您必须提供标识用户的令牌。
  • 不,您需要一种方法来登录用户,这将生成一个 JWT 令牌。是您将提供的令牌吗?
  • 好的,谢谢我试试
  • 此链接说明如何生成 JWT 令牌:blog.pusher.com/laravel-jwt

标签: php laravel rest laravel-8


【解决方案1】:

如果您想检索登录的用户详细信息

您可以通过以下方式访问它

auth()->user()->id

但是当用户已经登录时,它会返回一些 id。你可以使用

用于 API 身份验证的 JWT、Passport 等。

【讨论】:

  • 我尝试按照官方 Laravel 文档安装 Passport。当我尝试运行 php artisan migrate 以创建 oauth 表时,它给了我这个错误:Illuminate\Database\QueryException SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'password_resets' already exists (SQL: create table password_resets` (email varchar(255) not null, token varchar(255) not null, created_at timestamp null) 默认字符集 utf8mb4 collat​​e 'utf8mb4_unicode_ci')`。表已经存在。如何正确安装 Passport?
  • 删除表 password_resets 然后运行 ​​php artisan migrate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多