引言
为了留存用户,我们会想尽办法获取用户的注册,并将其留在应用内。
laravel开发好了一部分用户注册和登陆的代码,如果图省事不要二次开发的,
拿来用就可以了。而如果要深度定制用户权限的开发者,也非常有必要了解用户和授权相关的内容。
本期为大家说一说用户注册和登陆的功能。
users数据表
用户的数据和信息必然在数据库内,所以laravel自带了User模型,在 app/User.php 文件内,
内部代码声明了必要的部分:
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
}
大家可能会注意到,这个模型文件与我们之前介绍的 Model 模型差别非常大,因为其直接继承了 IlluminateFoundationAuthUser 类,
我们接着追溯该类的内容:
class User extends Model implements
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword, MustVerifyEmail;
}
原来在此处,User 类不仅继承了Model模型类,还实现了很多个与权限相关的接口类。
- AuthenticatableContract 用于识别用户身份和token等
- AuthorizableContract 用于定义用户是否有某些权限
- CanResetPasswordContract 用于修改密码
这些内容,我们其他章节再详细讲解。
有了模型还没有数据库表,这个模型除了能处理逻辑,一点数据都拿不到。所以第一步我们要把数据库迁移完成。
来看一下默认的users表的迁移文件 2014_10_12_000000_create_users_table.php 的内容,还是我们之前无数次强调过的,先实现 up 方法用于迁移表格:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
还有一个是回滚迁移使用的 down 方法:
public function down()
{
Schema::dropIfExists('users');
}
迁移回滚的时候,如果users表创建成功了,就将其删除。
在命令行执行迁移指令:
php artisan migrate
执行成功后使用mysql客户端连接数据库,打印users表结构,如下图:
登陆注册
有了users表的数据支持,还有laravel内置的用户逻辑,我们可以很方便地拥有一个登陆和注册的页面。
在命令行执行指令:
php artisan make:auth
这是一个脚手架指令,直观地可以看到首页登陆多了 LGOIN, REGISTER 导航按钮。还有在 resources/views/auth 目录内,
创建了默认的视图文件。
看一下路由文件 routes/web.php ,多了一行代码:
Auth::routes();
这个就跟我们使用 Route::resource() 方法会默认创建restfulapi需要的所有控制器方法一样,这个 Auth::routes() 所包含的内容,
都是跟用户注册登录,忘记密码,重置密码等等息息相关的。
预注册的路由如下图:
这洋洋洒洒的路由和控制器方法,如果我们自己设计,那得费多少时间?这下好,拿来直接用了。要不说laravel真香呢!
下面是默认的注册前端页面。
写在最后
本文介绍了如何使用laravel自带的users表所关联的用户授权功能,
可以说是一个具有用户功能的应用程序的基石,我们后面的文章会着重深入介绍。
Happy coding :-)
我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者