Laravel开发实践Laravel

Laravel从入门到上线运营-07登录注册篇

2019-10-10  本文已影响0人  3275508ab630

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=phpwd 就是键, php 就是值。

还有一种是 post,它不能直接在地址栏中请求,而是通过 htmlform 请求。请求也是一个链接地址,和地址栏上的链接一样,链接填在 action 中。form 默认也是 get 请求,需要指定一下 method

但是键值对是通过 input 去拼凑,name 是键,value 是值,最后点击 submit,就会发送请求。之后浏览器的地址栏链接是没 ? 后缀的,数据是存在的,具体可以看上面的 register.blade.php 所写。

如果需要提交数组,getpost 一样,都是键后面跟括号就行:name[]=1&name[]=2,括号里也可以加键:name[name1]=1&name[name2]=2,结构也可以不止一层:name[name][]=vpost 就是多写几个 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/ 测试一下,requestauth 的登录方法是框架已经做好了,我们直接拿来用先,很多东西都是用多了就明白了,后面同学自己文档学习。数据已经插入表了,用户已经登录了,修改一下 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 存在,后面我们继续完善。

上一篇 下一篇

猜你喜欢

热点阅读