如何在Laravel 5.6中结合MongoDB使用原生Auth功能?
Laravel Auth结合MongoDB实现登录注册的完整指南
嘿,刚好能帮到你!先直接回答你的核心问题:php artisan make:auth在Laravel 7及更早版本是完全可行的,但Laravel 8及以后的版本已经移除了这个命令,得用官方提供的Auth Starter Kit(比如Breeze或Jetstream)来实现。结合MongoDB的话,还要额外做一些适配配置,下面我一步步给你讲清楚:
第一步:安装MongoDB Laravel适配器
Laravel默认不支持MongoDB,所以首先要安装第三方适配包:
- 打开终端,在你的Laravel项目根目录执行:
composer require jenssegers/mongodb - 接下来配置数据库连接:打开
config/database.php,做两处修改:- 将
default连接改成mongodb:'default' => env('DB_CONNECTION', 'mongodb'), - 在
connections数组里添加MongoDB的配置:'mongodb' => [ 'driver' => 'mongodb', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', 27017), 'database' => env('DB_DATABASE', 'your_database_name'), 'username' => env('DB_USERNAME', ''), 'password' => env('DB_PASSWORD', ''), 'options' => [ 'database' => 'admin' // 用于MongoDB认证的默认数据库 ] ],
- 将
- 别忘了在
.env文件里更新对应的数据库环境变量:DB_CONNECTION=mongodb DB_HOST=127.0.0.1 DB_PORT=27017 DB_DATABASE=your_laravel_db DB_USERNAME= DB_PASSWORD=
第二步:根据Laravel版本配置Auth系统
情况1:Laravel 7及更早版本(支持make:auth)
- 生成Auth脚手架:
这个命令会自动生成登录、注册的路由、视图和控制器。php artisan make:auth - 修改User模型:打开
app/User.php,让它继承MongoDB的模型而非默认的Eloquent模型,同时设置主键类型:use Jenssegers\Mongodb\Eloquent\Model as Eloquent; class User extends Eloquent { protected $primaryKey = '_id'; protected $keyType = 'string'; public $incrementing = false; // 其余原有代码保持不变 protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; } - 处理迁移(可选):MongoDB不需要传统的SQL迁移,如果你不想用迁移,可以直接删除
database/migrations下的用户相关迁移文件;如果要使用该包提供的MongoDB迁移,需要确保迁移类继承Jenssegers\Mongodb\Schema\Blueprint。
情况2:Laravel 8+版本(无make:auth,用Starter Kit)
这里以轻量的Laravel Breeze为例:
- 安装Breeze:
(注意:执行composer require laravel/breeze --dev php artisan breeze:install blade # 这里选blade模板,也可以选react/vue npm install && npm run dev php artisan migratemigrate前,因为我们用MongoDB,默认的迁移可能会报错,所以先修改User模型再执行迁移,或者直接跳过迁移,因为MongoDB会自动创建集合) - 修改User模型:和上面一样,改为继承MongoDB的模型并设置主键:
use Jenssegers\Mongodb\Eloquent\Model as Eloquent; class User extends Eloquent { protected $primaryKey = '_id'; protected $keyType = 'string'; public $incrementing = false; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; protected $casts = [ 'email_verified_at' => 'datetime', ]; } - 配置Auth Provider:打开
config/auth.php,确保providers下的users使用MongoDB驱动:
(因为我们的User模型继承了MongoDB的Eloquent,所以默认的eloquent驱动依然能正常工作)'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, // 这里模型已经是MongoDB的了,所以没问题 ], ],
第三步:测试功能
- 启动本地服务器:
php artisan serve - 访问
http://localhost:8000/register,注册一个新用户,然后检查你的MongoDB数据库,应该会自动生成users集合,并且存储了用户数据。 - 再访问
http://localhost:8000/login,用刚才注册的账号登录,确认能正常进入仪表盘。
一些注意事项
- 如果你遇到MongoDB连接问题,先确认本地MongoDB服务是否正常运行,端口号和配置是否匹配。
- Laravel的密码重置、邮箱验证等功能也能正常和MongoDB配合,只需要确保对应的模型(比如PasswordReset)也继承MongoDB模型(如果需要的话)。
内容的提问来源于stack exchange,提问作者Amalendu Kar
相关产品推荐
相关产品推荐

