我使用Dingo API package创建了一个类似电报 api的api。
在第一步中,用户发送一些参数,然后我验证这些参数,如果所有内容都是真的,则用户信息包括返回的令牌。像这样:
public function signIn (Request $request)
{
$phone_number = $request->get('phone_number');
$phone_code_hash = $request->get('phone_code_hash');
$phone_code = $request->get('phone_code');
if ($this->verifyCode($phone_code_hash, $phone_code, $phone_number)) {
$user = User::where('phone_number', $phone_number)->firstOrFail();
$user->injectToken();
return $this->response->item($user, new UserTransformer);
} else {
return [
'success' => false,
'type' => 'PHONE_NUMBER_IS_NOT_REGISTERED',
'code' => 703,
'message' => 'Phone Code Is Correct But Phone Number Is Not Registered.'
];
}
}
如您所见,signIn
方法具有用户身份验证职责。
现在我不知道如何收听Illuminate\Auth\Events\Authenticated
,Illuminate\Auth\Events\Login
等here等身份验证事件。
事实上,我想在用户登录成功时运行一个事件。
我正在使用larvel 5.3。
任何解决方案?
答案 0 :(得分:1)
Dingo不支持这些事件。
但是,您可以创建一个自定义中间件来触发Illuminate\Auth\Events\Authenticated
事件成功,如下所示:
应用程序/ HTTP /中间件/ Auth.php
namespace App\Http\Middleware;
use Dingo\Api\Http\Middleware\Auth as BaseAuth;
use Closure;
class Auth extends BaseAuth {
/**
* Perform authentication before a request is executed.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle($request, Closure $next)
{
$route = $this->router->getCurrentRoute();
if (! $this->auth->check(false)) {
$this->auth->authenticate($route->getAuthenticationProviders());
event(new \Illuminate\Auth\Events\Authenticated($this->auth->getUser());
}
return $next($request);
}
}
最后,只需注册并将此中间件添加到您的路线