Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse zum Refactoring der Laravel-Registrierung

Analyse zum Refactoring der Laravel-Registrierung

不言
不言Original
2018-06-13 17:23:511264Durchsuche

Dieser Artikel stellt hauptsächlich die Analyse der Laravel-Registrierungsrekonstruktion vor, die einen gewissen Referenzwert hat. Jetzt können Freunde in Not darauf zurückgreifen.

Manchmal muss man Laravel verwenden, um einen Hintergrund zu erstellen Content-Management-System, aber die Standard-Login-Registrierung von Laravel kann die aktuellen Anforderungen nicht erfüllen, daher ist eine Rekonstruktion der Laravel-Registrierung erforderlich. Folgen wir dem Editor, um zu sehen, wie die Registrierungsrekonstruktion durchgeführt wird.

1. Bestimmen Sie zunächst die Route für die Benutzerregistrierung

Die bei der Installation von Laravel generierte Registrierung erfolgt standardmäßig per E-Mail sind nicht erforderlich, und einige müssen einige Formularoptionen hinzufügen

Bei der Registrierung können wir uns nicht zufällig registrieren, nur einige Superadministratoren können sich registrieren

Zuerst verwenden wir das UserController, das wir letztes Mal zur Konfiguration erstellt haben. Wenn nicht, können wir mit php artisan make:controller UserController eine Controller-Klasse

erstellen und dann zwei Routen Route::get('register', 'UserController@getRegister') und Route: :post(' erstellen. register', 'UserController@postRegister')<code>Route::post('register', 'UserController@postRegister')<br>

Ersteres ist eine get-Anfrage zum Anzeigen einer Registrierungsseite, gefolgt von einer post-Anfrage zur Registrierung eines Kontos.

2. Zeigen Sie die Registrierungskontoseite an

Dabei wird die Methode getRegister verwendet keine besondere Logik

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

3. Antrag auf Registrierung eines Kontos

Dies verwendetpostRegisterDiese Methode

Das Registrieren eines Kontos entspricht dem Zurücksetzen Ihres Passworts und ist einfacher als das Registrieren eines Kontos.

Wenn wir einen Benutzerdatensatz in die Datenbank einfügen, können wir zum Einfügen User::create($data) verwenden.

$data ist ein Array, das den Schlüssel und Wert jedes Feldes speichert

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;);
}

4. Abgeschlossenes Beispiel

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('/');
}

register.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>

5. Middleware – Benutzer muss angemeldet sein

Jetzt registrieren Damit alles erledigt ist, brauchen wir nur das Urteil des Benutzers. Die Registrierung eines Kontos ist nur bei einem Konto mit Superadministratorrechten erforderlich.

In diesem Fall besteht unser allgemeines Verfahren darin, die Informationen des Benutzers direkt in der postRegister-Methode herauszufinden und dann zu prüfen, ob der Benutzer diese Berechtigung erfüllt. Wenn nicht, springen Sie zu anderen Seiten.

Diese Methode ist in Ordnung, aber da wir über die Berechtigungen eines Superadministrators und eines Administrators verfügen, muss sie an mehr als einem Ort verwendet werden und wird auch an anderen Orten verwendet.

Dann wird jemand darüber nachdenken, in model eine Methode zu schreiben, die in Zukunft bei Bedarf direkt aufgerufen werden kann.

Diese Methode ist ebenfalls möglich, wir empfehlen jedoch die Verwendung der von Laravel bereitgestellten Middleware-Funktion. Diese Funktion ist sehr leistungsstark und einfach zu verwenden. Jetzt werden wir die Middleware-Funktion verwenden.

Da wir ein Backend-Content-Management-System sind, erstellen wir zunächst eine Middleware. Die Funktion besteht darin, dass alle Seiten vor dem Aufruf angemeldet sein müssen, sonst springen sie zur Anmeldeseite.

Schauen Sie im Handbuch nach und stellen Sie fest, dass Sie mit dem Befehl php artisan make:middleware CheckLoginMiddleware eine Middleware erstellen können. Natürlich können Sie eine ähnliche Datei kopieren und auf die gleiche Weise ändern.

Dann wird eine app/Http/Middleware/ Middleware-Datei im CheckLoginMiddleware-Verzeichnis erstellt. Darin befindet sich nur eine handle()-Methode. Wir fügen unsere Funktionen direkt hinzu

<?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;
 }
}

Die Funktion dieser Middleware besteht darin, dass beim Generieren einer Route zunächst Auth::check() verwendet wird, um festzustellen, ob der Benutzer angemeldet ist. Wenn nicht, springen Sie zur Anmeldeseite.

Die Methode ist geschrieben, kann aber noch nicht verwendet werden. Wir müssen diese Middleware registrieren und dem Framework mitteilen, dass die Middleware geschrieben ist und verwendet werden kann, und welchen Umfang sie hat.

Im Verzeichnis app/Http/ gibt es eine Kernel.php-Datei zum Registrieren dieser Middleware, die dem Framework mitteilt, dass wir diese Middleware geschrieben haben.

Es gibt zwei Array-Attribute in der Kernel.php-Datei, eines $middleware bedeutet globale Verwendung und das andere $routeMiddleware bedeutet optionale Verwendung.

Globale Nutzung bedeutet, dass diese Middleware unabhängig von der von Ihnen angeforderten Seite zuerst ausgeführt wird.

Wählen Sie „Verwenden“, um anzugeben, welche HTTP-Anfrage erforderlich ist und wo die Middleware ausgeführt werden muss.

Wenn für jede Seite hier eine Anmeldung erforderlich ist, können Sie eine globale Seite registrieren und ein $middleware

\App\Http\Middleware\CheckLoginMiddleware::class

hinzufügen. 🎜>Registrieren Sie sich und Sie können es nutzen


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

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);
 }
}

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

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

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

&#39;user.group&#39; => \App\Http\Middleware\CheckGroupMiddleware::class

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

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

在router.php文件里使用

Route::get(&#39;/&#39;, [&#39;middleware&#39; => [&#39;user.group&#39;], function () {
 //
}]);

在控制器内使用

$this->middleware(&#39;user.group&#39;);

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

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;);

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

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

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

 public function index()
 {
  return view('my.index');
 }
}

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

相关推荐:

Larave如何实现短信注册

Das obige ist der detaillierte Inhalt vonAnalyse zum Refactoring der Laravel-Registrierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn