首页 > 解决方案 > Laravel 8 多用户认证 JWT

问题描述

我必须为“用户”和“管理员”建模。'User' 是 Laravel 中的默认模型。我想分别验证这些模型。

class Admin extends Authenticatable implements JWTSubject
{ 
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'email',
        'name',
        'contact',
        'password'
    ];
    
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }

}

在 auth.php 中,

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
            'hash' => false,
        ],
        'admins' => [
            'driver' => 'jwt',
            'provider' => 'admins',
        ],
        'admin-api' => [
            'driver' => 'jwt',
            'provider' => 'admins',
        ],
    ],
'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Models\Admin::class,
        ],
    ],

在 AdminController.php 中,

/**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:admins');
    }
public function register(Request $request){


        $creds = [
            'email' => $request->input('email'),
            'name' => $request->input('name'),
            'password' => bcrypt($request->input('password')),
            'contact' => $request->input('contact'),

        ];
        
        
        try {
            $admin = Admin::create($creds);
            

             
        } catch (\Throwable $th) {
            return response(
                [
                    
                    'message' => $th,
                    'success' => false
                    
                ],
                
            );
        }
        
        event(new Registered($admin));
        $token = JWTAuth::fromUser($admin);
        
        return response(
            [
                'user' => $admin,
                'message' => 'register success',
                'token' => $token,
                'success' => true
            ],
            201
        );
        
        
        
        }

    public function login(Request $request){

            $creds = [
                'email' => $request->input('email'),
                'password' => $request->input('password')
            ];
        
             if(!Auth()->attempt($creds)){
        
                return response([
                    'message' => 'login faild!',
                    'success' => false
                ]);
        
             }
        
             
        $admin = Auth()->user();
        
        
        
        $token = JWTAuth::fromUser($admin);
        
        return response(
            [
                'user' => $admin,
                'token' => $token,
                'success' => true
            ],
            201
            );
        
        
        
        
    }

你能帮助我吗?我不知道如何正确使用注册和登录功能。你能解释一下这些函数中发生了什么吗?如何正确使用中间件?

标签: jwtlaravel-8

解决方案


推荐阅读