登录
首页 >  数据库 >  MySQL

laravel5.1 -- 获取用户的登录状态,事件、监听、中间件的简单应用

来源:SegmentFault

时间:2023-02-16 15:19:56 479浏览 收藏

哈喽!今天心血来潮给大家带来了《laravel5.1 -- 获取用户的登录状态,事件、监听、中间件的简单应用》,想必大家应该对数据库都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到MySQL、PHP、github、laravel、apache,若是你正在学习数据库,千万别错过这篇文章~希望能帮助到你!

事件存在很多方面,比如登录、购买商品、搜索、查看文章等等。 监听器监听到事件发生后,会执行一些操作。

protected $listen = [
    'App\Events\LoginEvent' => ['App\Listeners\LoginSuccess'],
    'App\Events\LogoutEvent' => ['App\Listeners\LogoutSuccess'],
    'App\Events\UserAccess' => ['App\Listeners\UserAccess']
];

然后,在根目录下执行

<?php namespace App\Events;

use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class LoginEvent extends Event
{
    use SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    function __construct()
    {
        
    }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return [];
    }
}

<?php namespace App\Listeners;

use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Services\Statut;


class ListenerBase
{    
    /**
    * The statut intance
    *
    * @var App\Services\Statut
    */
    protected $statut;

    /**
    * Create a listener event
    *
    * @param App\Service\Statut $statut
    * @return void
    */
    function __construct()
    {
        $this->statut = new Statut;
    }
}
?>

<?php namespace App\Listeners;

use App\Events\LoginEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class LoginSuccess extends ListenerBase
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Handle the event.
     *
     * @param  LoginEvent  $event
     * @return void
     */
    public function handle(LoginEvent $event)
    {   
        $this->statut->setLoginStatut($event);
    }
}

<?php namespace App\Services;

/**
* 
*/
class Statut
{
    
    function __construct()
    {
        # code...
    }

    /**
    * Set the login user statut
    *
    * @var App\Event\LoginEvent
    * @return void
    */
    public function setLoginStatut($event){
        session()->put('statut', auth()->user()->role->slug);//auth()->user()在用户登录完成后才会有值
    }

    /**
    * Set visitor statut
    *
    * @return void
    */
    public function setVisitorStatut(){
        session()->put('statut', 'visitor');
    }

    /**
    * Set the statut
    *
    * @return void
    */
    public function setStatut(){
        if(!session()->has('statut')){
            session()->put('statut', auth()->check() ? auth()->user()->role->slug : 'visitor');
        }
    }
}
?>

好了,事件和监听器完成之后,就需要触发操作了,这里我们用中间件(

<?php namespace App\Http\Middleware;

use Closure;
use App\Events\LoginEvent;

class App
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {   
        event(new LoginEvent);   //实例化App/Events/UserAccess,

        return $next($request);
    }
}

最后,再将

<?php namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \App\Http\Middleware\App::class,  //App中间件
    ];

完成上面的操作后,就可以获取用户的登录状态了。在

Statut.php
中,我们把用户状态分为
visitor
admin
,
user
,根据登录用户的不同状态来显示出不同的内容。例如,如果是
admin
,则他可以进入后台并执行一些操作,如果是
user
或者
visitor
,那么他只能浏览一些页面

总结:

了解自己想要做什么,达到什么样的目的,操作的过程中,思路应清晰。


以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于数据库的相关知识,也可关注golang学习网公众号。

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>