Laravel从入门到上线运营-07登录注册篇
上次我们说到网站基本上就是 curd,我们就来尝试做一下简单的用户注册登录。没敲代码前,先别急着往下看,大家先自己想想思路,如果是你来做,应该怎么做,想好了再往下看。
注册其实就是增加 users 表一条记录,表上次已经建好了,可以用 mysql工具看一下表结构和 database/migrations 文件对比学习一下。
最简单的注册就填入邮箱和密码即可,我们创建注册路由和界面。
routes/web.php 中加一条注册路由
Route::get('register', 'RegisterController@index');
创建 controller,命令行输入,并添加方法。
php artisan make:controller RegisterController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RegisterController extends Controller
{
public function index()
{
return view('register');
}
}
创建 register.blade.php
@extends('app')
@section('title', '注册')
@section('content')
<div class="container">
<div class="row">
<div class="col-12">
<form action="{{ url('register') }}" method="post">
@csrf
<input type="email" name="email" placeholder="邮箱" required>
<input type="password" name="password" placeholder="密码" required>
<button type="submit">注册</button>
</form>
</div>
</div>
</div>
@endsection
注册的话,肯定是要把注册信息发送给 php,这里讲一下网页怎么传数据给 php,一般我们访问网页就是两种方式,
一种是 get,就是直接在浏览器中输入地址访问,如果需要带上数据,就在链接后面用 ? 开头,再英文名(建)=值,如果有多个键值对,则用 & 连接。
可以打开百度首页搜索 php 看一下,网页地址就明白了。
https://www.baidu.com/s?wd=php&rsv_spt=1&rsv_iqid=0xa8ea06db000c83b6&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=3&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&inputT=580&rsv_sug4=580
其中的 wd=php,wd 就是键, php 就是值。
还有一种是 post,它不能直接在地址栏中请求,而是通过 html 的 form 请求。请求也是一个链接地址,和地址栏上的链接一样,链接填在 action 中。form 默认也是 get 请求,需要指定一下 method。
但是键值对是通过 input 去拼凑,name 是键,value 是值,最后点击 submit,就会发送请求。之后浏览器的地址栏链接是没 ? 后缀的,数据是存在的,具体可以看上面的 register.blade.php 所写。
如果需要提交数组,
get和post一样,都是键后面跟括号就行:name[]=1&name[]=2,括号里也可以加键:name[name1]=1&name[name2]=2,结构也可以不止一层:name[name][]=v,post就是多写几个input。
到这里我们的注册界面就弄好了。再继续完善,编写插入数据代码。添加路由也叫 register,但是指定 post 访问。get 带参数一般是用来做搜索功能的,其他带参数的请求一般都是 post。
Route::post('register', 'RegisterController@register');
public function register(Request $request)
{
dd($request->all());
}
用 $request 来拿请求数据,网页自己注册一下看看网页上的数据。dd 是停止并打印。
24BBCAD6-ADA8-4E1A-8567-2E792573EC3B.png
这里有个 _token 数据,这是 @csrf 生成的,可以查看网页源代码。laravel 为了安全问题,除了 get,其他方式请求路由都需要这个值,具体文档中有讲解,同学自行学习。
User 模型文件已经有了,无需自己创建。继续修改 register 方法。
public function register(Request $request)
{
//添加记录
$user = User::create([
'name' => '',
'email' => $request->email,
'password' => bcrypt($request->password) //用户密码并是不直接存入,而是存入加密后的值
]);
//登录用户
auth()->login($user); //注册完成后是直接将用户登录的
//返回首页
return redirect('/');
}
访问 b/register/ 测试一下,request 和 auth 的登录方法是框架已经做好了,我们直接拿来用先,很多东西都是用多了就明白了,后面同学自己文档学习。数据已经插入表了,用户已经登录了,修改一下 welcome.blade.php 可以看看当前用户的登录信息。
@extends('app')
@section('title', '首页')
@section('content')
<div class="container">
<div class="row">
<div class="col-12">
{{ auth()->user()->email }}
</div>
</div>
</div>
@endsection
再来做登录功能,登录可以看成增删改查中的查。输入账号和密码,查询表中有对应数据则登录。
创建登录路由与界面
routes/web.php
Route::get('login', 'LoginController@index');
Route::post('login', 'LoginController@login');
login.blad.php
@extends('app')
@section('title', '登录')
@section('content')
<div class="container">
<div class="row">
<div class="col-12">
<form action="{{ url('login') }}" method="post">
@csrf
<input type="email" name="email" placeholder="邮箱" required>
<input type="password" name="password" placeholder="密码" required>
<button type="submit">登录</button>
</form>
</div>
</div>
</div>
@endsection
创建 controller,命令行输入,并添加方法。
php artisan make:controller LoginController
LoginController.php
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class LoginController extends Controller
{
public function index()
{
return view('login');
}
public function login(Request $request)
{
$user = User::where('email', $request->email)->first();
if (empty($user)) {
dd('用户不存在');
}
if (Hash::check($request->password, $user->password)) { //因为表里是加密的,所以是查询出来后,再通过方法验证。
auth()->login($user); //登录
return redirect('/'); //回到首页
}
dd('密码错误');
}
}
访问 b/login/ 测试一下。至此注册登录功能就做完了,总结一下也就是 4 个路由和方法,但是真的拿来给别人用还是有很多 bug 存在,后面我们继续完善。