这不起作用,因为您说的是以下内容:
在处理此请求之前,请验证用户是否已通过 Web 提供程序进行身份验证,但是,他们也必须通过我的 api 提供程序进行身份验证。
您可以解决此问题的一种方法是只拥有两个控制器,但扩展一个基本控制器,其中包含已经内置的功能:
App
|
---- Http
|
---- Controllers
|
---- UserController (this will be our base)
---- API
|
---- UserController (will extend the base)
---- Web
|
---- UserController (will extend the base)
然后你应该相应地设置路由组:
//Your "web provider" authenticated routes
Route::group(['middleware' => ['auth:web'] 'namespace' => 'Web', function(){
});
然后对于您的 API 请求:
//your "api provider" authenticated routes
Route::group(['middleware' => ['auth:api'], 'namespace' => 'API', function(){
});
这是我们将放在两个组中的路线:
Route::post('user/info', 'UserController@info');
然后基本控制器应该看起来像这样:
class UserController extends App\Http\Controller {
/**
* Update the specified User Resource
*
* @param Illuminate\Http\Request $request
* @param App\User $user
*
* @returns mixed
*/
public function update(Illuminate\Http\Request $request, App\User $user)
{
if ($request->ajax()) {
try {
DB::transaction(function() use ($request, $user) {
$user->update($request->only($user->getFillable()));
});
DB::commit();
} catch (\Exception $e){
DB::rollback();
return response()->json($e->getMessage(), 422);
}
}
}
}
请注意,我在没有访问实际代码的情况下键入此内容,因此$user->getFillable()
可能会返回一个集合,要求您将其转换为数组。如果是这种情况,只需链接$user->getFillable()->toArray()
到最后。
这其中的神奇之处在于,如果进程请求成功,您可以.done()
在 promise 对象上捕获它。如果失败,那么您将收到一条422 Unprocessable Entity in Request
消息,该消息将触发您.fail()
对 promise 对象的访问。
UserController
现在,只需从您的两个API/Web
UserController扩展这个基础:
<?php
namespace App\Http\Controllers\Api;
class UserController extends App\Http\Controllers\UserController {
}
虽然您必须做一些重复的逻辑,但为了清晰起见,在整个应用程序堆栈中保持这种级别的分离非常重要。如果您仍需要更改任一路线的内容,此方法仍将允许您进行一定程度的精细控制,但为您提供了工作的基础。
希望这会有所帮助。