Laravel Passport认证-多表、多字段解决方案(二)

本文详细介绍了如何在 Laravel 中使用 Passport 实现单表和多表用户登录认证,包括安装Passport、迁移数据库、修改模型、配置路由和中间件等步骤,并给出了代码示例和测试建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概述

一年前写过一篇关于Passport多表认证的博客,但是有小伙伴反应说:走不通,于是抽时间,重构一下这篇博客,当然不同的时间,解决方案也不一样
当然也会有很多重复的地方,请参考可用的地方
上一篇博客地址:Laravel Passport认证-多表、多字段解决方案

2. 单表用户登录

2.1 安装

首先通过 Composer 包管理器安装 Passport:

根据laravel不同的版本,加载不同的管理包,如果你使用laravel5.4版本;使用命令composer require laravel/passport v4.*;不然可能因为版本问题,加载失败

composer require laravel/passport v4.*

成功安装Passport包之后,我们需要设置他们的服务提供者。所以,打开你的config / app.php文件,并在其中添加以下提供程序。

'providers' => [
    ....
    Laravel\Passport\PassportServiceProvider::class,
],

2.2 迁移数据库

Passport 服务提供者为框架注册了自己的数据库迁移目录,所以在注册服务提供者之后(Laravel 5.5之后会自动注册服务提供者)需要迁移数据库,Passport 迁移将会为应用生成用于存放客户端和访问令牌的数据表:

php artisan migrate

2.3 生成加密键oauth_clients

php artisan passport:install

该命令将会创建生成安全访问令牌(token)所需的加密键
此外,该命令还会创建“personal access”和“password grant”客户端用于生成访问令牌,生成记录存放在数据表 oauth_clients

2.4 修改user模型

添加 Laravel\Passport\HasApiTokens trait 到 App\User 模型,该 trait 将会为模型类提供一些辅助函数用于检查认证用户的 token 和 scope

<?php

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}
2.4.1 验证字段进行修改

默认验证email,如果你验证字段不是email,这里可以充值验证规则

例:验证phone和email一起验证;在User模型中添加如下方法:

 public function findForPassport($username)
 {
     return $this->orWhere('email', $username)->orWhere('phone', $username)->first();
 }
2.4.1 密码验证进行修改

默认验证密码规则为Hash 如果你的密码验证规则不是Hash这里需要更改

例:请求密码等于数据库密码

 public function validateForPassportPasswordGrant($password)
 {
     //如果请求密码等于数据库密码 返回true(此为实例,根据自己需求更改)
     if($password == $this->password){
         return true;
     }
     return false;
 }

2.5 注册获取Token路由

接下来,需要在 AuthServiceProvider 的 boot 方法中调用 Passport::routes 、enableImplicitGrant、tokensCan、tokensEx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值