博文主要是使用Laravel8创建自定义登录和注册。
使用传统简单方法创建自定义用户登录、注册、面板页面。
案例
有如下步骤:
①创建Laravel应用;
②连接MySQL数据库;
③设置auth的Controller;
④创建auth路由;
⑤创建auth的blade视图文件;
⑥启动Laravel服务。
创建Laravel应用
安装陪配置好composer后,使用下面的命令创建Laravel项目。
composer create-project --prefer-dist laravel/laravel laravel_new
进入创建应用的目录。
cd laravel_new
连接数据库
让Laravel连接mysql数据库,打开.env配置文件,修改数据库名,用户名,密码:
- DB_CONNECTION=mysql
- DB_HOST=127.0.0.1
- DB_PORT=3306
- DB_DATABASE=database_name
- DB_USERNAME=database_user_name
- DB_PASSWORD=database_password
Laravel提供了默认的用户模型和迁移文件,所以可以用php命令通过默认给的迁移文件创建mysql表。
php artisan migrate
设置权限Controller
调用下面的命令,创建Controller
php artisan make:controller CustomAuthController
在app\Http\Controllers\CustomAuthController.php替换成如下代码:
- <?php
-
- namespace App\Http\Controllers;
-
- use Illuminate\Http\Request;
- use Hash;
- use Session;
- use App\Models\User;
- use Illuminate\Support\Facades\Auth;
-
- class CustomAuthController extends Controller
- {
-
- public function index()
- {
- return view('auth.login');
- }
-
-
- public function customLogin(Request $request)
- {
- $request->validate([
- 'email' => 'required',
- 'password' => 'required',
- ]);
-
- $credentials = $request->only('email', 'password');
- if (Auth::attempt($credentials)) {
- return redirect()->intended('dashboard')
- ->withSuccess('Signed in');
- }
-
- return redirect("login")->withSuccess('Login details are not valid');
- }
-
-
-
- public function registration()
- {
- return view('auth.registration');
- }
-
-
- public function customRegistration(Request $request)
- {
- $request->validate([
- 'name' => 'required',
- 'email' => 'required|email|unique:users',
- 'password' => 'required|min:6',
- ]);
-
- $data = $request->all();
- $check = $this->create($data);
-
- return redirect("dashboard")->withSuccess('You have signed-in');
- }
-
-
- public function create(array $data)
- {
- return User::create([
- 'name' => $data['name'],
- 'email' => $data['email'],
- 'password' => Hash::make($data['password'])
- ]);
- }
-
-
- public function dashboard()
- {
- if(Auth::check()){
- return view('dashboard');
- }
-
- return redirect("login")->withSuccess('You are not allowed to access');
- }
-
-
- public function signOut() {
- Session::flush();
- Auth::logout();
-
- return Redirect('login');
- }
- }
创建Auth路由
在routes/web.php中添加如下代码:
- <?php
-
- use Illuminate\Support\Facades\Route;
- use App\Http\Controllers\CustomAuthController;
-
-
- /*
- |--------------------------------------------------------------------------
- | Web Routes
- |--------------------------------------------------------------------------
- */
-
- Route::get('dashboard', [CustomAuthController::class, 'dashboard']);
- Route::get('login', [CustomAuthController::class, 'index'])->name('login');
- Route::post('custom-login', [CustomAuthController::class, 'customLogin'])->name('login.custom');
- Route::get('registration', [CustomAuthController::class, 'registration'])->name('register-user');
- Route::post('custom-registration', [CustomAuthController::class, 'customRegistration'])->name('register.custom');
- Route::get('signout', [CustomAuthController::class, 'signOut'])->name('signout');
创建auth的blade视图文件
在resources/views中创建login.blade.php:
- @extends('app')
-
- @section('content')
- <main class="login-form mt-5">
- <div class="cotainer">
- <div class="row justify-content-center">
- <div class="col-md-4">
- <div class="card">
- <h3 class="card-header text-center">Login</h3>
- <div class="card-body">
- <form method="POST" action="{{ route('login.custom') }}">
- @csrf
- <div class="form-group mb-3">
- <input type="text" placeholder="Email" id="email" class="form-control" name="email" required
- autofocus>
- @if ($errors->has('email'))
- <span class="text-danger">{{ $errors->first('email') }}</span>
- @endif
- </div>
- <div class="form-group mb-3">
- <input type="password" placeholder="Password" id="password" class="form-control" name="password" required>
- @if ($errors->has('password'))
- <span class="text-danger">{{ $errors->first('password') }}</span>
- @endif
- </div>
- <div class="form-group mb-3">
- <div class="checkbox">
- <label>
- <input type="checkbox" name="remember"> Remember Me
- </label>
- </div>
- </div>
- <div class="d-grid mx-auto">
- <button type="submit" class="btn btn-dark btn-block">Signin</button>
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
- </div>
- </main>
- @endsection
随后创建registration.blade.php在resources/views/auth目录下:
- @extends('app')
-
- @section('content')
- <main class="signup-form mt-5">
- <div class="cotainer">
- <div class="row justify-content-center">
- <div class="col-md-4">
- <div class="card">
- <h3 class="card-header text-center">Registration</h3>
- <div class="card-body">
- <form action="{{ route('register.custom') }}" method="POST">
- @csrf
- <div class="form-group mb-3">
- <input type="text" placeholder="Name" id="name" class="form-control" name="name"
- required autofocus>
- @if ($errors->has('name'))
- <span class="text-danger">{{ $errors->first('name') }}</span>
- @endif
- </div>
- <div class="form-group mb-3">
- <input type="text" placeholder="Email" id="email_address" class="form-control"
- name="email" required autofocus>
- @if ($errors->has('email'))
- <span class="text-danger">{{ $errors->first('email') }}</span>
- @endif
- </div>
- <div class="form-group mb-3">
- <input type="password" placeholder="Password" id="password" class="form-control"
- name="password" required>
- @if ($errors->has('password'))
- <span class="text-danger">{{ $errors->first('password') }}</span>
- @endif
- </div>
- <div class="form-group mb-3">
- <div class="checkbox">
- <label><input type="checkbox" name="remember"> Remember Me</label>
- </div>
- </div>
- <div class="d-grid mx-auto">
- <button type="submit" class="btn btn-dark btn-block">Sign up</button>
- </div>
- </form>
- </div>
- </div>
- </div>
- </div>
- </div>
- </main>
- @endsection
下一步在resources/views中创建dashborad.blade.php文件:
- @extends('layouts.app')
-
- @section('content')
- <nav class="navbar navbar-light navbar-expand-lg mb-5" style="background-color: #e3f2fd;">
- <div class="container">
- <a class="navbar-brand mr-auto" href="#">Example</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
- aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarNav">
- <ul class="navbar-nav">
- @guest
- <li class="nav-item">
- <a class="nav-link" href="{{ route('login') }}">Login</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="{{ route('register-user') }}">Register</a>
- </li>
- @else
- <li class="nav-item">
- <a class="nav-link" href="{{ route('signout') }}">Logout</a>
- </li>
- @endguest
- </ul>
- </div>
- </div>
- </nav>
- @endsection
最后创建resources/views/app.blade.php文件:
- <!DOCTYPE html>
- <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>{{config('app.name','LSAPP')}}</title>
- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet">
- </head>
- <body>
- @yield('content')
- </body>
运行laravel服务
php artisan serve
注册URL和登录URL分别为:
- http://127.0.0.1:8000/registration
- http://127.0.0.1:8000/login
输出: