Laravel5.4入门系列9.注册登录、用户关联
时间:2023-03-29 17:19:27
PHP
本节将实现文章、评论、用户关联功能。关系定义首先修改posts和comments表,添加user_id字段/database/migrations/2017_04_12_124622_create_posts_table.php/database/migrations/2017_04_15_062905_create_comments_table.phppublicfunctionup(){Schema::create('posts',$printtable){//添加$table->integer('user_id')->unsigned();$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');});}回滚,重新执行迁移:$phpartisanmigrate:refresh添加用户表、文章表、评论表的一对多关系:/app/User.phppublicfunctionposts(){return$this->hasMany(\App\Post::class);}publicfunctioncomments(){return$this->hasMany(\App\Comment::class);}添加多对一关系在文章、评论表和用户表之间:/app/Comment.php/app/Post.phppublicfunctionuser(){return$this->belongsTo(\App\User::class);}同时添加user_id添加到评论表的$fillable字段中。注册首先定义一个控制器,处理注册相关的业务:定义返回注册页面视图的方法:publicfunctioncreate(){returnview('registration.create');}创建注册页面:/resources/views/registration/create.blade.php@extends('layouts.master')@section('content'){{csrf_field()}}用户名:Email我们不会与他人分享您的电子邮件地址密码:再次输入密码:submit
@endsection定义路由响应注册提交:Route::post('/register','RegistrationController@store');定义处理注册提交的方法:/app/Http/Controllers/RegistrationController.phpuseApp\User;publicfunctionstore(){$this->validate(request(),['name'=>'required','email'=>'required|email','password'=>'需要|确认',]);$user=User::create(request(['name','password','email']));验证()->登录($用户);returnredirect()->home();}这个方法包括四个部分:验证字段,这里password使用confirmed验证规则,会自动匹配xxx是否和xxx_confirmation一致,所以前面的视图要按照规格创建用户并登录。用户返回名为“home”的路由。我们需要给路由命名以匹配第四步:Route::get('/posts','PostsController@index')->name('home');注册功能虽然完成了,但是我们保存密码使用的明文。我们可以定义一个修改器,每次保存密码时自动加密:/app/User.php处理用户登录业务的控制器:$phpartisanmake:controllerSessionsController当用户访问/login时,路由分发请求:Route::get('/login','SessionsController@create');create方法返回用户登录页面视图:/resources/views/sessions/create.blade.php@extends('layouts.master')@section('content')
{{csrf_field()}}电子邮件<输入类型="email"class="form-control"name="email"id="email"required>密码:Login @endsection用户点击登录后,路由分发请求:Route::post('/login','SessionsController@store');最后,控制器进程登录行为:/app/Http/Controllers/SessionsController.phppublicfunctionstore(){if(!auth()->attempt(request(['email','password']))){returnback()->withErrors(['messages'=>'请确保邮箱和密码正确!']);}returnredirect()->home();}我们使用Auth提供的attempt()用于认证的类,只需通过输入email和密码即可。attempt方法会对密码进行加密,并与数据库进行比对,匹配则为用户开启认证会话。同时,我们还自定义了返回的错误信息。logout和logout的实现比较简单。首先是路由:Route::get('/logout','SessionsController@destroy');控制器:publicfunctiondestroy(){auth()->logout();returnredirect()->home();}最后,我们优化导航,根据用户登录信息显示不同的设置项: