laravel5.3注册登录--注册

php–laravel框架注册

要想使用laravel框架,我这里总结了laravel框架的基本的3要素。
  1. 在route目录下定义路由,定义路由的方式:get,post,any,resource,match小编这里简单的一下。
  2. 根据刚刚创建好的路由,创建控制器Controller,建议使用php artisan创建,在控制器里面写对应的业务逻辑。
  3. 创建需要的视图文件,index.blade.php
1,注册路由

a,小编这里注册路由使用了laravel的中间件,如果还有小伙伴不了解中间件,可以去laravel中文网laravel中文网去查看。

使用路由组定义路由,方便操作
Route::group(['namespace'=>'Admin','prefix'=>'admins'],function (){
    //注册路由
    Route::match(['get','post'],'register','RegisterController@register');
});    
2,注册控制器

a,利用laravel的表单验证进行请求的数据判断,是否合理。
b,利用laravel自带的发送邮件,进行用户激活,如果不会发送邮件,请查看小编的这篇文章laravel5.3发送邮件
c,前端利用ajax发送请求。
4,验证码使用laravel框架自带的,网上教程一大把,这里就不阐述了。需要 php artisan 安装。参考小编的验证码安装laravel5.3验证码安装

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;

class RegisterController extends Controller
{
    //注册路由
    function register(Request $request){
        //var_dump(captcha_img('flat'));die();
        if ($request->isMethod('GET')){
            return view('admin.registerLogin');
        }else{
            //接收数据
            $values = $request->all();
            //验证规则
            $rules = [
              'email'=>'required|unique:user,email|email',
              'user'=>'required|unique:user,user',
              'pwd'=>'required|same:repwd',
              'code'=>'required|captcha',
            ];
            //返回提示信息
            $message = [
              'email.required'=>'邮箱不能为空',
              'email.unique'=>'邮箱已注册,请登录',
              'email'=>'邮箱格式不正确',
              'user.required'=>'用户名不能为空',
              'user.unique'=>'用户名已存在,请重试',
              'pwd.required'=>'密码不能为空',
              'pwd.same'=>'两次密码输入不一致',
              'code.required'=>'验证码不能为空',
              'code.captcha'=>'验证码输入错误'

            ];
            $validator = \Validator::make($values,$rules,$message);
            if ($validator->passes()){
                $user = $request->input('user');
                $email = $request->input('email');
                $result = DB::table('user')->where([['user','=',$user],['email','=',$email]])->first();
                if ($result){
                    $data = [
                      'status'=>'4',
                      'massage'=>'用户已经注册,请重试'
                    ];
                    return $data;
                }else{
                    unset($_POST['repwd']);
                    unset($_POST['code']);
                    $_POST['create_time'] = time();
                    $_POST['pwd'] = md5(md5($_POST['pwd']));
                    $_POST['token'] = str_random(50);
                    $_POST['status'] = 1;
                    $result = DB::table('user')->insertGetID($_POST);
                    if ($result){
                        //发送邮件到注册时的邮箱
                        Mail::send('mail.index',['id'=>$result,'token'=>$_POST['token']],function($message){
                            $message->to($_POST['email']);
                            $message->subject('亲爱的用户,恭喜您注册成功');
                        });
                        //返回邮箱地址,跳转立即激活页面
                        $mail_arr = explode('@',$_POST['email']);
                        $href = "mail.".$mail_arr[1];
                        $data = [
                            'status'=>'200',
                            'href'=>$href,
                            'info'=>'注册成功'
                        ];
                        return $data;
                    }else{
                        $data = [
                            'status'=>'403',
                            'info'=>'注册失败'
                        ];
                        return $data;
                    }
                }
            }else{
                return response()->json([
                    'status'=>'1',
                    'info'=>$validator->errors()->first()
                ]);
            }
        }
    }
3,注册的视图

a,视图中利用layui弹出层给用户提示;
b,视图文件我就把重要的贴出来了,其他的都是注册的form表单的信息。
c,js部分需要注意的是,laravel本身是有CSRF验证的,默认是开启的,由于注册时post请求,就要进行CSRF验证,当然,也可以在laravel中关闭CSRF。小编这里把处理CSRF验证写在最下方。

<div id="signup-box" class="signup-box widget-box no-border">
<div class="widget-body">
<div class="widget-main">
	<h4 class="header green lighter bigger">
		<i class="ace-icon fa fa-users blue"></i>
		用户注册
	</h4>
	<div class="space-6"></div>
	<p>填写信息: </p>
	<form id="regForm">
		<fieldset>
			<label class="block clearfix">
				<span class="block input-icon input-icon-right">
					<input name="email" type="email" class="form-control" placeholder="邮箱" />
					<i class="ace-icon fa fa-envelope"></i>
				</span>
			</label>
			<label class="block clearfix">
				<span class="block input-icon input-icon-right">
					<input name="user" type="text" class="form-control" placeholder="用户名" />
					<i class="ace-icon fa fa-user"></i>
				</span>
			</label>
			<label class="block clearfix">
				<span class="block input-icon input-icon-right">
					<input name="pwd" type="password" class="form-control" placeholder="密码" />
					<i class="ace-icon fa fa-lock"></i>
				</span>
			</label>

			<label class="block clearfix">
				<span class="block input-icon input-icon-right">
					<input name="repwd" type="password" class="form-control" placeholder="确认密码" />
					<i class="ace-icon fa fa-retweet"></i>
				</span>
			</label>
			<label class="block clearfix">
				<span class="block input-icon input-icon-right">
					<input type="text" class="form-control" name="code" placeholder="输入验证码" />
					<label style="margin-top:30px;">验证码</label>
					<img id="codeReg" style="margin-top:10px;float: right" src="{{ captcha_src('flat') }}" onclick="this.src='/captcha/flat?'+Math.random()" title="点击图片重新获取验证码">
				</span>
			</label>

			<label class="block">
				<input type="checkbox" class="ace" />
				<span class="lbl">
					接受
					<a href="#">用户协议</a>
				</span>
			</label>

			<div class="space-24"></div>

			<div class="clearfix">
				<button type="reset" class="width-30 pull-left btn btn-sm">
					<i class="ace-icon fa fa-refresh"></i>
					<span class="bigger-110">重置</span>
				</button>

				<button id="register" type="button" class="width-65 pull-right btn btn-sm btn-success">
					<span class="bigger-110">注册</span>
					<i class="ace-icon fa fa-arrow-right icon-on-right"></i>
		</button>
</div>	

js部分

<script type="text/javascript">
			$.ajaxSetup({
				headers: {
					'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
				}
			});
			//注册
			$("#register").click(function(){
                $("#codeReg").attr('src',src='/captcha/flat?'+Math.random());
				$.ajax({
					type:'post',
					url:'/admins/register',
					dataType:'json',
					data:$("#regForm").serialize(),
					success:function(data){
						if (data.status=='1'){
						    layer.msg(data.info,{icon:5,time:1000});
                        }else if(data.status=='403'){
                            layer.msg(data.info,{icon:5,time:1000});
                        }else{
                            /*layer.confirm('是否立即激活?', {
                                btn: ['确认','取消'] //按钮
                            }, function(){
                                window.location.href="http://www.jb51.net";
                            });*/
                           /* layer.open({
                                type: 1,
                                area: ['300px', '360px'],
                                shadeClose: true, //点击遮罩关闭
                                content: "<a style='width:200px;height: 100px;' href=http://"+data.href+">立即激活</a>"
                            });*/
                           alert('立即激活');
                           window.location.href="http://"+data.href;
                        }
					},
					error:function(){
                        layer.msg("网络错误,稍后重试",{icon:5,time:1000});
                        window.location.reload();
					}
				})
			});
ajax请求处理CSRF验证的办法

a,在head头中加meta标签,content写上CSRF
b,在ajax请求的时候使用ajaxSetup把CSRF传递到headers请求头里面。

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta id="farm_csrf" name="csrf-token" content="{{ csrf_token() }}">
		<title>登录页面</title>

		<meta name="description" content="User login page" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
		<!-- bootstrap & fontawesome -->
		<link rel="stylesheet" href="/admin/assets/css/bootstrap.min.css" />
		<link rel="stylesheet" href="/admin/assets/font-awesome/4.2.0/css/font-awesome.min.css" />
	</head>
	
//把CSRF的值写进headers里面	
$.ajaxSetup({
	headers: {
		'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
	}
});

完成页面的效果

在这里插入图片描述
在这里插入图片描述

作为一名程序员,也有困境的时候,也需要一些心灵的鸡汤,大家可以关注我的公众号。跟我一起喝鸡汤。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zxh7770/article/details/91476031