LoginUsingId()在midleware jwt.auth,Laravel 5

时间:2015-12-16 16:13:08

标签: php laravel

如果我将我的路线放在jwt.auth midleware中,这已经让我疯狂了2个小时似乎无法修复它。我希望以另一个用户身份登录,而我已经使用Laravel中的LoginUsingId()函数从我的管理仪表板以管理员身份登录,如果我不将令牌作为参数传递,它可以正常工作,但我必须保护我的api使用jwt令牌所以我不能删除midleware jwt.auth ..无论如何,即使路由在midleware jwt.auth中,我还能使它工作吗?

工作示例:

//Login as other User
Route::post('users/loginas/{userId}', ['as' => 'login_as', 'uses' => 'UserController@loginAs']);
Route::get('classes/{class_id}/market_feeds', ['as' => 'show_market_feeds', 'uses' => 'MarketFeedController@index']);
Route::group(['middleware' => 'jwt.auth'], function () {

})

不工作:

Route::group(['middleware' => 'jwt.auth'], function () {
//Login as other User
Route::post('users/loginas/{userId}', ['as' => 'login_as', 'uses' => 'UserController@loginAs']);
Route::get('classes/{class_id}/market_feeds', ['as' => 'show_market_feeds', 'uses' => 'MarketFeedController@index']);
})

用于切换用户的我的控制器如下:

public function loginAs($userId)
{
    Auth::logout();
    Auth::loginUsingId($userId, true);
    return response()->json(['logged' => Auth::check(), 'user' => Auth::user()->username, 'id' => Auth::user()->id]);
}

效果很好,我可以看到用户详细信息...但是当我尝试拨打另一个电话时调用此功能:

public function displaySomethingElse($classId)
{
    return response(array('username'=>Auth::user()->username,'id' => Auth::user()->id));
}

它返回admin用户,而不是我想要的特定用户......

我希望我足够清楚。

1 个答案:

答案 0 :(得分:1)

您可以遵循的一种方法是根据用户对象生成令牌并返回该令牌。并且,使用返回的令牌进行下一次调用。

您使用的库有generating tokens based on user object

选项

您可以传递您要登录的用户的id或任何其他标识符。请记住,此调用为admin。接收来自用户对象的响应令牌,并使用此令牌进行下一次调用。这使您以要登录的用户身份登录。

如果您不明白我想说的话,请随时发表评论。