• Laravel文档阅读笔记-Custom Authentication Login And Registration Using Laravel 8


    博文主要是使用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配置文件,修改数据库名,用户名,密码:

    1. DB_CONNECTION=mysql
    2. DB_HOST=127.0.0.1
    3. DB_PORT=3306
    4. DB_DATABASE=database_name
    5. DB_USERNAME=database_user_name
    6. DB_PASSWORD=database_password

    Laravel提供了默认的用户模型和迁移文件,所以可以用php命令通过默认给的迁移文件创建mysql表。

    php artisan migrate 

    设置权限Controller

    调用下面的命令,创建Controller

    php artisan make:controller CustomAuthController

    在app\Http\Controllers\CustomAuthController.php替换成如下代码:

    1. <?php
    2. namespace App\Http\Controllers;
    3. use Illuminate\Http\Request;
    4. use Hash;
    5. use Session;
    6. use App\Models\User;
    7. use Illuminate\Support\Facades\Auth;
    8. class CustomAuthController extends Controller
    9. {
    10. public function index()
    11. {
    12. return view('auth.login');
    13. }
    14. public function customLogin(Request $request)
    15. {
    16. $request->validate([
    17. 'email' => 'required',
    18. 'password' => 'required',
    19. ]);
    20. $credentials = $request->only('email', 'password');
    21. if (Auth::attempt($credentials)) {
    22. return redirect()->intended('dashboard')
    23. ->withSuccess('Signed in');
    24. }
    25. return redirect("login")->withSuccess('Login details are not valid');
    26. }
    27. public function registration()
    28. {
    29. return view('auth.registration');
    30. }
    31. public function customRegistration(Request $request)
    32. {
    33. $request->validate([
    34. 'name' => 'required',
    35. 'email' => 'required|email|unique:users',
    36. 'password' => 'required|min:6',
    37. ]);
    38. $data = $request->all();
    39. $check = $this->create($data);
    40. return redirect("dashboard")->withSuccess('You have signed-in');
    41. }
    42. public function create(array $data)
    43. {
    44. return User::create([
    45. 'name' => $data['name'],
    46. 'email' => $data['email'],
    47. 'password' => Hash::make($data['password'])
    48. ]);
    49. }
    50. public function dashboard()
    51. {
    52. if(Auth::check()){
    53. return view('dashboard');
    54. }
    55. return redirect("login")->withSuccess('You are not allowed to access');
    56. }
    57. public function signOut() {
    58. Session::flush();
    59. Auth::logout();
    60. return Redirect('login');
    61. }
    62. }

    创建Auth路由

    在routes/web.php中添加如下代码:

    1. <?php
    2. use Illuminate\Support\Facades\Route;
    3. use App\Http\Controllers\CustomAuthController;
    4. /*
    5. |--------------------------------------------------------------------------
    6. | Web Routes
    7. |--------------------------------------------------------------------------
    8. */
    9. Route::get('dashboard', [CustomAuthController::class, 'dashboard']);
    10. Route::get('login', [CustomAuthController::class, 'index'])->name('login');
    11. Route::post('custom-login', [CustomAuthController::class, 'customLogin'])->name('login.custom');
    12. Route::get('registration', [CustomAuthController::class, 'registration'])->name('register-user');
    13. Route::post('custom-registration', [CustomAuthController::class, 'customRegistration'])->name('register.custom');
    14. Route::get('signout', [CustomAuthController::class, 'signOut'])->name('signout');

    创建auth的blade视图文件

    在resources/views中创建login.blade.php:

    1. @extends('app')
    2. @section('content')
    3. <main class="login-form mt-5">
    4. <div class="cotainer">
    5. <div class="row justify-content-center">
    6. <div class="col-md-4">
    7. <div class="card">
    8. <h3 class="card-header text-center">Login</h3>
    9. <div class="card-body">
    10. <form method="POST" action="{{ route('login.custom') }}">
    11. @csrf
    12. <div class="form-group mb-3">
    13. <input type="text" placeholder="Email" id="email" class="form-control" name="email" required
    14. autofocus>
    15. @if ($errors->has('email'))
    16. <span class="text-danger">{{ $errors->first('email') }}</span>
    17. @endif
    18. </div>
    19. <div class="form-group mb-3">
    20. <input type="password" placeholder="Password" id="password" class="form-control" name="password" required>
    21. @if ($errors->has('password'))
    22. <span class="text-danger">{{ $errors->first('password') }}</span>
    23. @endif
    24. </div>
    25. <div class="form-group mb-3">
    26. <div class="checkbox">
    27. <label>
    28. <input type="checkbox" name="remember"> Remember Me
    29. </label>
    30. </div>
    31. </div>
    32. <div class="d-grid mx-auto">
    33. <button type="submit" class="btn btn-dark btn-block">Signin</button>
    34. </div>
    35. </form>
    36. </div>
    37. </div>
    38. </div>
    39. </div>
    40. </div>
    41. </main>
    42. @endsection

    随后创建registration.blade.php在resources/views/auth目录下:

    1. @extends('app')
    2. @section('content')
    3. <main class="signup-form mt-5">
    4. <div class="cotainer">
    5. <div class="row justify-content-center">
    6. <div class="col-md-4">
    7. <div class="card">
    8. <h3 class="card-header text-center">Registration</h3>
    9. <div class="card-body">
    10. <form action="{{ route('register.custom') }}" method="POST">
    11. @csrf
    12. <div class="form-group mb-3">
    13. <input type="text" placeholder="Name" id="name" class="form-control" name="name"
    14. required autofocus>
    15. @if ($errors->has('name'))
    16. <span class="text-danger">{{ $errors->first('name') }}</span>
    17. @endif
    18. </div>
    19. <div class="form-group mb-3">
    20. <input type="text" placeholder="Email" id="email_address" class="form-control"
    21. name="email" required autofocus>
    22. @if ($errors->has('email'))
    23. <span class="text-danger">{{ $errors->first('email') }}</span>
    24. @endif
    25. </div>
    26. <div class="form-group mb-3">
    27. <input type="password" placeholder="Password" id="password" class="form-control"
    28. name="password" required>
    29. @if ($errors->has('password'))
    30. <span class="text-danger">{{ $errors->first('password') }}</span>
    31. @endif
    32. </div>
    33. <div class="form-group mb-3">
    34. <div class="checkbox">
    35. <label><input type="checkbox" name="remember"> Remember Me</label>
    36. </div>
    37. </div>
    38. <div class="d-grid mx-auto">
    39. <button type="submit" class="btn btn-dark btn-block">Sign up</button>
    40. </div>
    41. </form>
    42. </div>
    43. </div>
    44. </div>
    45. </div>
    46. </div>
    47. </main>
    48. @endsection

    下一步在resources/views中创建dashborad.blade.php文件:

    1. @extends('layouts.app')
    2. @section('content')
    3. <nav class="navbar navbar-light navbar-expand-lg mb-5" style="background-color: #e3f2fd;">
    4. <div class="container">
    5. <a class="navbar-brand mr-auto" href="#">Example</a>
    6. <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
    7. aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
    8. <span class="navbar-toggler-icon"></span>
    9. </button>
    10. <div class="collapse navbar-collapse" id="navbarNav">
    11. <ul class="navbar-nav">
    12. @guest
    13. <li class="nav-item">
    14. <a class="nav-link" href="{{ route('login') }}">Login</a>
    15. </li>
    16. <li class="nav-item">
    17. <a class="nav-link" href="{{ route('register-user') }}">Register</a>
    18. </li>
    19. @else
    20. <li class="nav-item">
    21. <a class="nav-link" href="{{ route('signout') }}">Logout</a>
    22. </li>
    23. @endguest
    24. </ul>
    25. </div>
    26. </div>
    27. </nav>
    28. @endsection

    最后创建resources/views/app.blade.php文件:

    1. <!DOCTYPE html>
    2. <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    3. <head>
    4. <meta charset="utf-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1">
    7. <title>{{config('app.name','LSAPP')}}</title>
    8. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet">
    9. </head>
    10. <body>
    11. @yield('content')
    12. </body>

    运行laravel服务

    php artisan serve 

    注册URL和登录URL分别为:

    1. http://127.0.0.1:8000/registration
    2. http://127.0.0.1:8000/login

    输出:

     

     

  • 相关阅读:
    vue3使用element-plus
    Elasticsearch进阶教程:生成离线官方文档
    基于开放共享的自主研发—MaxCompute 持续增强生态与开放性建设
    后端入门教程:从零开始学习后端开发
    Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、TLS组织运行维护Orderer服务
    There are not enough slots available in the system to satisfy the 48 slots报错
    关于小程序TabBar跳转页面跟TabBar标签栏的icon不对应的分析(debug)
    Java中的Spring Cloud:微服务与注册中心
    《Map-Matching for Low-Sampling-Rate GPS Trajectories》 读书笔记
    年搜索量超 7 亿次背后:这款 APP 用火山引擎 DataTester 完成“数据驱动”
  • 原文地址:https://blog.csdn.net/qq78442761/article/details/125570806