dsw7547 2017-02-14 08:27
浏览 67
已采纳

在Dingo API laravel包中收听Auth事件

I used Dingo API package to create an api like Telegram api.

In the first step User sends some parameters , then I verify those and if all things was true user informations included a Token returned. like this :

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.'
        ];
    }
}

As you can see signIn method has user authentication duty.

Now I do not know how can I listen to authentication events like Illuminate\Auth\Events\Authenticated ,Illuminate\Auth\Events\Login and etc described here.

In fact I want to run an event whenever user login was successfull.

I'm using larvel 5.3.

Any solution ؟

  • 写回答

1条回答 默认 最新

  • duanluanhui8348 2017-02-14 10:14
    关注

    These events are not supported out of the box by Dingo.

    You may however, create a custom middleware to fire an Illuminate\Auth\Events\Authenticated event on success like so:

    app/Http/Middleware/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);
        }
    }
    

    Finally, just register and add this middleware to your routes

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题