Php LoginUsingId()不在midleware jwt.auth中工作,Laravel 5

Php LoginUsingId()不在midleware jwt.auth中工作,Laravel 5,php,laravel,Php,Laravel,这已经让我疯狂了2个小时,如果我把我的路线放在jwt.auth midleware中,似乎无法修复它。我想以另一个用户的身份登录,而我已经使用Laravel中的LoginUsingId()函数从我的管理仪表板以管理员的身份登录,如果我不将令牌作为参数传递,这一切都很好,但我必须使用jwt令牌保护我的api,因此我无法删除midleware jwt.auth。。即使路由在midleware jwt.auth中,我是否仍可以使其工作 工作示例: //Login as other User Route

这已经让我疯狂了2个小时,如果我把我的路线放在jwt.auth midleware中,似乎无法修复它。我想以另一个用户的身份登录,而我已经使用Laravel中的LoginUsingId()函数从我的管理仪表板以管理员的身份登录,如果我不将令牌作为参数传递,这一切都很好,但我必须使用jwt令牌保护我的api,因此我无法删除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));
}
它返回管理员用户,而不是我想要的特定用户


我希望我说得足够清楚。

您可以遵循的一种方法是基于用户对象生成令牌并返回该令牌。并且,在下一次呼叫中使用返回的令牌

您正在使用的库具有以下选项:

您可以传递
id
或您想要登录的用户的任何其他标识符。请记住,此调用是作为
admin
。接收从用户对象生成的响应令牌,并在下次调用时使用此令牌。这使您以您想要的身份登录


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

这是非常预期的行为,因为jwt auth的id登录是基于令牌中的id完成的。因此,令牌中的
id
始终是您的“管理员”
id
。我可以想到的一种方法是在前端解码令牌,替换为其他用户id,然后使用jwt.auth使用的相同算法再次编码,并将其作为
承载者
授权传递。(虽然之前没有试过,但知道它是否有效会很好)那么,你建议我怎么做?解决这个问题的最佳解决方案是什么?thnx,我会尝试一下,如果你不改变除
sub
键以外的任何其他值,那么它应该会起作用。这可能会有帮助