zoukankan      html  css  js  c++  java
  • 简单使用auth认证实现登录注册

    1 添加路由

    //注册
    Route::get('/register',"RegisterController@index");
    Route::post('/register',"RegisterController@register");
    
    //登录
    Route::get('/login',"LoginController@index");
    Route::post('/login',"LoginController@login");
    Route::get('/logout',"LoginController@logout");
    

    2. 配置app下的默认守卫为 web 服务提供者为users 

    对应的model为新建的 

    AppModelsUser::class
    <?php
    
    return [
    
       
    
        'defaults' => [
            'guard' => 'web',
            'passwords' => 'users',
        ],
    
      
    
        'guards' => [
            'web' => [
                'driver' => 'session',
                'provider' => 'users',
            ],
    
            'api' => [
                'driver' => 'token',
                'provider' => 'users',
                'hash' => false,
            ],
        ],
    
    
        'providers' => [
            'users' => [
                'driver' => 'eloquent',
                'model' => AppModelsUser::class,
            ],
    
            // 'users' => [
            //     'driver' => 'database',
            //     'table' => 'users',
            // ],
        ],
    
      
    
        'passwords' => [
            'users' => [
                'provider' => 'users',
                'table' => 'password_resets',
                'expire' => 60,
            ],
        ],
    
    ];
    

      3 新建appModels文件夹 Usermodel 继承 Authenticatable

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentModel;
    
    use IlluminateFoundationAuthUser as Authenticatable;
    
    
    class User extends Authenticatable
    {
    
    
    	protected $table = "users";
    	public $primaryKey = 'id';
    
    	protected $fillable = [
                'name', 'password',
        ];
    
    	protected $hidden = [
                'password', 'remember_token',
            ];
    }
    

     4 建立控制和模板

    LoginController.php
    <?php
    
    namespace AppHttpControllers;
    
    use AppConstantsErrorCode;
    use BradyToolDataDeal;
    use BradyToolExceptionExceptionResult;
    use BradyToolResponseResponse;
    use IlluminateHttpRequest;
    use IlluminateSupportFacadesAuth;
    use IlluminateSupportFacadesRedirect;
    
    class LoginController extends Controller
    {
    	public function index()
    	{
    		return view('login/index');
    	}
    
    	public function login(Request $request)
    	{
    
    		$data = $request->input();
    		$data = Deal::trim($data);
    
    		$name = $data['name'];
    		$password = $data['password'];
    
    
    		try{
    			if(empty($name)){
    				ExceptionResult::throwException(ErrorCode::USER_NOT_EMPTY);
    			}
    
    			if(empty($password)){
    				ExceptionResult::throwException(ErrorCode::PASSWORD_NOT_EMPTY);
    			}
    
    			$is_remeber = boolval(isset($data['is_remember']));
    			if(Auth::attempt(['name'=>$name,'password'=>$password],$is_remeber)) {
    				return redirect('/posts');
    			} else {
    				ExceptionResult::throwException(ErrorCode::LOGIN_FAILED);
    			}
    
    
    		} catch (ExceptionResult $e){
    			return  Redirect::back()->with('error', $e->getMessage())->withInput();
    		}
    	}
    
    	public function logout()
    	{
    		Auth::logout();
    		return redirect('/login');
    	}
    }
    

      

    RegisterController.php
    <?php
    
    namespace AppHttpControllers;
    
    use AppConstantsErrorCode;
    use BradyToolExceptionExceptionResult;
    use BradyToolResponseResponse;
    use IlluminateHttpRequest;
    use AppModelsUser;
    
    class RegisterController extends Controller
    {
    
    	public function index()
    	{
    
    		return view('register/index');
    	}
    
    	public function register(Request $request)
    	{
    		try{
    
    			$data = $request->input();
    			if(empty($data['name'])){
    				ExceptionResult::throwException(ErrorCode::USER_NOT_EMPTY);
    			}
    
    			if(empty($data['password'])){
    				ExceptionResult::throwException(ErrorCode::PASSWORD_NOT_EMPTY);
    			}
    
    			if(empty($data['password_confirmation'])){
    				ExceptionResult:throwException(ErrorCode::PASSWORD_RE_NOT_EMPTY);
    			}
    			if($data['password'] != $data['password_confirmation']){
    				ExceptionResult::throwException(ErrorCode::PASSWORD_RE_NOT_SAME);
    			}
    
    			$user = new User();
    
    			$userExists = $user->where('name',$data['name'])->first();
    			if(!empty($userExists)){
    				ExceptionResult::throwException(ErrorCode::USER_EXISTS);
    			}
    
    			$user->name  = $data['name'];
    			$user->password = bcrypt($data['password']);
    			$user->save();
    			Response::success($user);
    
    		} catch (ExceptionResult $e){
    			Response::error($e->getCode(),$e->getMessage());
    		}
    	}
    }
    

      

    登录模板  index.blade.php
    
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">
    
        <title>登陆</title>
    
        <!-- Bootstrap core CSS -->
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    
        <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
        <link href="http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
    
        <!-- Custom styles for this template -->
        <link href="http://v3.bootcss.com/examples/signin/signin.css" rel="stylesheet">
    
    
        <script src="/lib/jquery/jquery-2.2.1.js"></script>
        <script src="/lib/layer/layer.js"></script>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
    
        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
        <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
        <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>
    
    <body>
    
    <div class="container" id="app">
    
        <form class="form-signin" method="POST" action="/login">
            {{csrf_field()}}
            <h2 class="form-signin-heading">请登录</h2>
            <label for="inputName" class="sr-only">用户名</label>
            <input v-model="form.name" autocomplete="off" type="text" value="{{ old("name") }}" name="name" id="inputName" class="form-control" placeholder="用户民"  autofocus>
            <label for="inputPassword" class="sr-only">密码</label>
            <input v-model="form.password"  autocomplete="off" type="password" value="{{ old('password') }}" name="password" id="inputPassword" class="form-control" placeholder="密码" >
            <div class="checkbox">
                <label>
                    <input v-model="form.is_remember"  type="checkbox" value="{{ old('is_remember') }}" name="is_remember"> 记住我
                </label>
            </div>
    
            @if (session('error'))
                <div class="alert alert-danger">
                    {{ session('error') }}
                </div>
            @endif
            <button class="btn btn-lg btn-primary btn-block" type="submit"  id="login">登陆</button>
            <a href="/register" class="btn btn-lg btn-primary btn-block" type="submit">去注册>></a>
        </form>
    
    </div> <!-- /container -->
    
    
    <script>
    //    var app = new Vue({
    //        el: '#app',
    //        data: {
    //            form:{
    //                name:'',
    //                password:'',
    //                _token:'',
    //                is_remember:0
    //            }
    //        },
    //        methods:{
    //            login:function(){
    //                this.form._token = $("#_token").val()
    //                axios.post('/login', this.form)
    //                    .then(function (response) {
    //                        var res = response.data;
    //                        if(res.code != 200){
    //                            layer.msg(res.msg,{icon:2});
    //                            console.log(res.msg )
    //                            return
    //                        } else {
    //                            layer.msg("登录成功",{icon:1});
    //                            setTimeout("location.href='/posts'",2000);
    //                        }
    //                    })
    //                    .catch(function (error) {
    //                        console.log(error);
    //                    });
    //            }
    //        }
    //    })
    </script>
    </body>
    </html>
    

      

    注册 index.blade.php
    
    
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
        <meta name="description" content="">
        <meta name="author" content="">
        <link rel="icon" href="../../favicon.ico">
    
        <title>注册</title>
    
        <!-- Bootstrap core CSS -->
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    
        <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
        <link href="http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
    
        <!-- Custom styles for this template -->
        <link href="http://v3.bootcss.com/examples/signin/signin.css" rel="stylesheet">
    
        <script src="/lib/jquery/jquery-2.2.1.js"></script>
        <script src="/lib/layer/layer.js"></script>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
    
        <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
        <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
        <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>
    
    <body>
    
    <div class="container" id="app">
    
        <div class="form-signin" >
            <input type="hidden" id="_token" name="_token" value="{{csrf_token()}}">
            <h2 class="form-signin-heading">请注册</h2>
            <div>
                <label for="name" class="sr-only">用户名</label>
                <input v-model="form.name" type="text" name="name" id="name" class="form-control" autocomplete="off" placeholder="用户名"   autofocus style="margin-bottom:10px;">
                <label  class="sr-only">密码</label>
                <input v-model="form.password" type="password" name="password" id="inputPassword" autocomplete="off" class="form-control"  placeholder="输入密码" >
    
                <label class="sr-only" >重复密码</label>
                <input v-model="form.password_confirmation" type="password" name="password_confirmation" class="form-control" placeholder="重复输入密码" >
    
                <button class="btn btn-lg btn-primary btn-block" type="submit" @click="registor">注册</button>
            </div>
    
        </div>
    
    </div> <!-- /container -->
    
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                form:{
                    name:'',
                    password:'',
                    password_confirmation:'',
                    _token:''
                }
            },
            methods:{
                registor:function(){
                    this.form._token = $("#_token").val()
                    axios.post('/register', this.form)
                        .then(function (response) {
                            var res = response.data;
                            if(res.code != 200){
                                layer.msg(res.msg,{icon:2});
                                console.log(res.msg )
                                return
                            } else {
                                layer.msg("注册成功",{icon:1});
                                setTimeout("location.href='/login'",2000);
                            }
                        })
                        .catch(function (error) {
                            console.log(error);
                        });
                }
            }
        })
    </script>
    </body>
    </html>
    

      

  • 相关阅读:
    js转盘游戏
    wps excel
    微软笔记本
    图片识别
    数据库 连接 集
    Vue + Element UI 实现权限管理系统 前端篇(十二):用户管理模块
    Vue + Element UI 实现权限管理系统 前端篇(十三):页面权限控制
    Vue + Element UI 实现权限管理系统 前端篇(十四):菜单功能实现
    Vue + Element UI 实现权限管理系统 前端篇(十五):嵌套外部网页
    Vue + Element UI 实现权限管理系统 前端篇(九):接口格式定义
  • 原文地址:https://www.cnblogs.com/brady-wang/p/11665454.html
Copyright © 2011-2022 走看看