身份验证和来宾用户使用单一API

时间:2019-07-03 12:57:19

标签: laravel laravel-5 laravel-passport

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

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

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

但是两种情况都发送带有收藏夹标志的产品列表。

如果我用空白的用户名和密码登录,并且在发送空白用户时发送请求 see_all_product

$user = $request->user();

但是,如果我像下面那样设置路线,则会获得用户详细信息。

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

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

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

我的 see_all_product 功能

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

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

我都通过授权令牌,但是中间件路由我获得了用户详细信息,但是非中间件路由我没有获得用户信息。

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

2 个答案:

答案 0 :(得分:2)

我认为您可以代替$request->user()来做到这一点:

if (auth('api')->check()) { 
    $user = auth('api')->user();
}

答案 1 :(得分:0)

关闭['middleware'=>'auth:api']

使用:$ request-> user('api');在您的控制器中。 来宾可以使用api,但用户为null;

身份验证用户可以将api用作真实用户。

alt: Auth :: guard('api')-> user(); auth('api')-> user();