Analyse sur la refactorisation de l'enregistrement Laravel

不言
Libérer: 2023-04-01 07:00:01
original
1204 Les gens l'ont consulté

Cet article présente principalement l'analyse de la reconstruction de l'enregistrement Laravel, qui a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Parfois, vous devez utiliser Laravel pour créer un backend. système de gestion de contenu, mais l'enregistrement de connexion par défaut de Laravel ne peut pas répondre aux besoins actuels, cela nécessite donc la reconstruction de l'enregistrement Laravel. Suivons l'éditeur pour voir comment effectuer la reconstruction de l'enregistrement.

1. Déterminez d'abord le parcours d'enregistrement de l'utilisateur

L'enregistrement généré par défaut lorsque nous installons Laravel est enregistré par e-mail. ne sont pas obligatoires, et certains doivent ajouter des options de formulaire

Lorsque nous nous inscrivons, nous ne pouvons pas nous inscrire par hasard, seuls certains super administrateurs peuvent s'inscrire

Tout d'abord, nous utilisons le UserController créé la dernière fois pour la configuration. Sinon, vous pouvez utiliser php artisan make:controller UserController pour créer une classe de contrôleur

puis créer deux routes Route::get('register', 'UserController@getRegister') et Route: :post(' register', 'UserController@postRegister')<code>Route::post('register', 'UserController@postRegister')<br>

La première est une get demande d'affichage d'une page d'inscription, suivie d'une post demande d'enregistrement d'un compte.

2. Afficher la page du compte d'inscription

Cela utilise la méthode getRegister Cette méthode n'a besoin que d'afficher une vue, il y a donc. non Logique spéciale

public function getRegister()
{
 return view(&#39;auth.register&#39;);
}
Copier après la connexion

3. Demande d'enregistrement d'un compte

Ceci est utilisé postRegisterCette méthode

L'enregistrement d'un compte équivaut à réinitialiser un mot de passe, et c'est plus simple que l'enregistrement d'un compte.

Lorsque nous insérons un enregistrement utilisateur dans la base de données, nous pouvons utiliser User::create($data) pour l'insérer.

$data est un tableau qui stocke la clé et la valeur de chaque champ

public function postRegister(Request $request)
{
 $rules = [
  &#39;username&#39;=>&#39;required|unique:finance_enewsuser&#39;,
  &#39;password&#39; => &#39;required|between:6,20|confirmed&#39;
 ];
 $messages = [
  &#39;required&#39;=>&#39;:attribute不能为空&#39;,
  &#39;unique&#39;=>&#39;用户名已被注册&#39;,
  &#39;between&#39; => &#39;密码必须是6~20位之间&#39;,
  &#39;confirmed&#39; => &#39;新密码和确认密码不匹配&#39;
 ];
 $username = $request->input(&#39;username&#39;);
 $password = $request->input(&#39;password&#39;);
 $group = $request->input(&#39;group&#39;);
 $data = $request->all();
 $validator = Validator::make($data, $rules, $messages);
 if ($validator->fails()) {
  return back()->withErrors($validator);
 }
 $data = [
  &#39;username&#39; => $username,
  &#39;password&#39; => bcrypt($password),
  &#39;groupid&#39; => $group,
  &#39;checked&#39; => 0,
  &#39;styleid&#39; => 1,
  &#39;filelevel&#39; => 0,
  &#39;loginnum&#39; => 0,
  &#39;lasttime&#39; => time(),
  &#39;lastip&#39; => &#39;127.0.0.1&#39;,
  &#39;truename&#39; => &#39;&#39;,
  &#39;email&#39; => &#39;&#39;,
  &#39;pretime&#39; => time(),
  &#39;preip&#39; => &#39;127.0.0.1&#39;,
 ];
 User::create($data); //插入一条新纪录,并返回保存后的模型实例
 //如果注册后还想立即登录的话,可以使用$user = User::create($data); Auth::login($user); 进行认证
 return redirect(&#39;/&#39;);
}
Copier après la connexion

4. Exemple terminé

UserController

public function getRegister()
{
 return view(&#39;auth.register&#39;);
}

public function postRegister(Request $request)
{
 $rules = [
  'username'=>'required|unique:finance_enewsuser',
  'password' => 'required|between:6,20|confirmed'
 ];
 $messages = [
  'required'=>':attribute不能为空',
  'unique'=>'用户名已被注册',
  'between' => '密码必须是6~20位之间',
  'confirmed' => '新密码和确认密码不匹配'
 ];
 $username = $request->input('username');
 $password = $request->input('password');
 $group = $request->input('group');
 $data = $request->all();
 $validator = Validator::make($data, $rules, $messages);
 if ($validator->fails()) {
  return back()->withErrors($validator);
 }
 $data = [
    'username' => $username,
    'password' => bcrypt($password),
    'groupid' => $group,
    'checked' => 0,
    'styleid' => 1,
    'filelevel' => 0,
    'loginnum' => 0,
    'lasttime' => time(),
    'lastip' => '127.0.0.1',
    'truename' => '',
    'email' => '',
    'pretime' => time(),
    'preip' => '127.0.0.1',
   ];
 User::create($data); //插入一条新纪录,并返回保存后的模型实例
 return redirect('/');
}
Copier après la connexion

s'inscrire .blade

<form class="login-form" action="" method="post">
 {!! csrf_field() !!}
 <h3 class="font-green">Sign Up</h3>
 @if(count($errors) > 0)
  <p class="alert alert-danger display-hide" style="display: block;">
   <button class="close" data-close="alert"></button>
   <span> </span>
  </p>
 @endif
 <p class="form-group">
  <label class="control-label visible-ie8 visible-ie9">用户名</label>
  <input class="form-control placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="username"> </p>
 <p class="form-group">
  <label class="control-label visible-ie8 visible-ie9">密码</label>
  <input class="form-control placeholder-no-fix" type="password" autocomplete="off" id="register_password" placeholder="Password" name="password"> </p>
 <p class="form-group">
  <label class="control-label visible-ie8 visible-ie9">重复密码</label>
  <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Repeat password" name="password_confirmation"> </p>
 <p class="form-group">
  <label class="control-label visible-ie8 visible-ie9">用户组</label>
  <select name="group" class="form-control">
    <option value="1"> 超级管理员 </option>
    <option value="2"> 管理员 </option>
    <option value="3"> 编辑 </option>
  </select>
 </p>
 <p class="form-actions">
  <button type="submit" id="register-submit-btn" class="btn btn-success uppercase pull-right">注册</button>
 </p>
</form>
Copier après la connexion

5. L'utilisateur doit être connecté<🎜 >

Maintenant que l'inscription est terminée, nous n'avons besoin que du jugement de l'utilisateur. Il est nécessaire d'enregistrer un compte uniquement avec un compte doté des privilèges de super-administrateur.


Dans ce cas, notre procédure générale consiste à rechercher directement les informations de l'utilisateur dans la méthode postRegister, puis à vérifier si l'utilisateur dispose de cette autorisation. Sinon, passez à d'autres pages.


Cette méthode est correcte, mais comme nous avons les autorisations de super-administrateur et d'administrateur, elle doit être utilisée à plus d'un endroit et également à d'autres endroits.


Ensuite, quelqu'un pensera à écrire une méthode en

, qui pourra être appelée directement si nécessaire dans le futur. model

Cette méthode est également possible, mais nous vous recommandons d'utiliser la fonction middleware fournie par laravel. Cette fonction est très puissante et simple à utiliser. Nous allons maintenant utiliser la fonction middleware.


Parce que nous sommes un système de gestion de contenu backend, nous créons d'abord un middleware. La fonction est que toutes les pages doivent être connectées avant d'entrer, sinon elles passeront à la page de connexion.


Consultez le manuel et constatez que vous pouvez utiliser la commande

pour créer un middleware. Bien sûr, copiez un fichier similaire et modifiez-le de la même manière. php artisan make:middleware CheckLoginMiddleware

Ensuite, un fichier middleware

est créé dans le répertoire app/Http/Middleware/. Il n'y a qu'une seule méthode CheckLoginMiddleware Nous y ajoutons directement nos fonctions handle()

.

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;

class CheckLoginMiddleware
{
 public function handle($request, Closure $next)
 {
  //使用Auth方法,需要引入use Auth;方法
  //$request->is(&#39;login&#39;)表示请求的URL是否是登录页
  //因为我们打算使用全局的,所以,需要把登录页排除,不然会无限重定向
  //如果你的登录页不是/login,而是/auth/login的话,就写$request->is(&#39;auth/login&#39;)
  //并且我们要在请求处理后执行其任务,因为我们需要获取到用户的登录信息
  $response = $next($request);
  if (!Auth::check() && !$request->is(&#39;login&#39;)) {
   return redirect(&#39;/login&#39;);
  }
  return $response;
 }
}
Copier après la connexion

La fonction de ce middleware est que si une route est générée, utilisez d'abord

pour déterminer si l'utilisateur est connecté. Sinon, accédez à la page de connexion. Auth::check()

La méthode est écrite, mais elle ne peut pas encore être utilisée. Nous devons enregistrer ce middleware et indiquer au framework que le middleware est écrit et peut être utilisé, et quel est le champ d'utilisation.


Il y a un fichier

dans le répertoire app/Http/ pour enregistrer ce middleware, qui indique au framework que nous avons écrit ce middleware. Kernel.php

Il y a deux attributs de tableau dans le fichier

, l'un Kernel.php signifie une utilisation globale et l'autre $middleware signifie une utilisation facultative. $routeMiddleware

Une utilisation globale signifie que quelle que soit la page que vous demandez, ce middleware sera exécuté en premier.


Choisissez d'utiliser pour indiquer quelle requête HTTP est requise et où le middleware doit être exécuté.


Si chaque page ici nécessite que vous vous connectiez, vous pouvez en enregistrer une globale et ajouter un

$middleware

<🎜 à l'attribut du tableau

. >
\App\Http\Middleware\CheckLoginMiddleware::class
Copier après la connexion

Inscrivez-vous et vous pourrez l'utiliser

>注意:请记住,如果定义全局的要格外小心,比如上面我们要排除登录页,不然因为用户没有登录,所以在哪个页面都会重定向到登录页,当然也包括登陆页

6. 中间件–特殊页面需要验证用户组

现在是进行用户权限页面的限制,同样我们也要重新创建一个中间件

使用php artisan make:middleware CheckGroupMiddleware创建一个新的中间件,用来判断这个用户是否满足这个权限

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;

class CheckGroupMiddleware
{
 public function handle($request, Closure $next)
 {
  $user = Auth::user();
  if ($user->groupid != 1) {
   return redirect(&#39;/&#39;);
  }
  return $next($request);
 }
}
Copier après la connexion

这里我们还是通过Auth::user()来获取到用户的信息,然后判断用户的组,不属于超级管理员就跳到首页。

然后我们在到app/Http/目录下有个Kernel.php文件是注册这个中间件的,这次我们注册为可以选择的中间件。

这个中间件因为是可以选择的,所以我们还需要给它起个别名,在$routeMiddleware数组属性里加如一条

&#39;user.group&#39; => \App\Http\Middleware\CheckGroupMiddleware::class
Copier après la connexion

创建一个可以使用usergroup这个名字使用的中间件。

创建好后,我们可以选择在哪里使用,一个是在router.php的路由文件里加入,一个是在controller里使用

在router.php文件里使用

Route::get(&#39;/&#39;, [&#39;middleware&#39; => [&#39;user.group&#39;], function () {
 //
}]);
Copier après la connexion

在控制器内使用

$this->middleware(&#39;user.group&#39;);
Copier après la connexion

这里我们选择在路由里添加中间件。让注册页面只能是超级管理员才可以注册

Route::get(&#39;register&#39;, &#39;UserController@getRegister&#39;)->middleware(&#39;user.group&#39;);
Route::post(&#39;register&#39;, &#39;UserController@postRegister&#39;)->middleware(&#39;user.group&#39;);
Copier après la connexion

我们目前只有两个路由要判断权限,所以使用了链式的写法,当然你也可以按照手册里上使用组的方式,组的方式更为优雅。

当然如果你的整个控制器内的方法都需要中间件进行验证过滤的话,你也可以创建组的形式,也可以直接在控制器内使用__construct方法,让每次请求这个控制器时,先执行中间件

class MyController extends Controller
{
 public function __construct()
 {
  $this->middleware(&#39;user.group&#39;);
 }

 public function index()
 {
  return view('my.index');
 }
}
Copier après la connexion

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Larave如何实现短信注册

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!