Cette fois, je vais vous amener Laravel pour implémenter un système d'authentification multi-utilisateurs. Quelles sont les précautions pour que Laravel implémente un système d'authentification multi-utilisateurs. Ce qui suit est un cas pratique, prenons un. regarder.
Avant-propos
Depuis Laravel 5.2, le système d'authentification Auth intégré peut prendre en charge l'authentification à plusieurs rôles. C'est-à-dire que si vous avez deux rôles : administrateur et utilisateur ordinaire, vous pouvez vous authentifier via le même système d'authentification.
Cet article vous présentera en détail le contenu pertinent du système d'authentification multi-utilisateurs Laravel et le partagera pour votre référence et votre étude. Je ne dirai pas grand-chose ci-dessous, jetons un coup d'œil à l'introduction détaillée. .
#1 Générer automatiquement du code
La propre authentification de Laravel peut générer une authentification pertinente via une seule ligne de commandesContrôleur, modèles et routage :
php artisan make:auth
Cela générera un contrôleur d'authentification AuthController et un contrôleur universel HomeController. Ce contrôleur ne sert à rien, il saute juste après une connexion réussie, il y a aussi quelques enregistrements de connexion. Vous pouvez trouver le modèle requis ; les fichiers en regardant dans la ressource/la vue ; et les routes d'authentification pertinentes seront générées dans les fichiers de routage. Le code source se trouve dans IlluminateRoutingRouter::auth();
, qui configure en fait certaines fonctions de connexion et d'enregistrement :
public function auth() { // Authentication Routes... $this->get('login', 'Auth\AuthController@showLoginForm'); $this->post('login', 'Auth\AuthController@login'); $this->get('logout', 'Auth\AuthController@logout'); // Registration Routes... $this->get('register', 'Auth\AuthController@showRegistrationForm'); $this->post('register', 'Auth\AuthController@register'); // Password Reset Routes... $this->get('password/reset/{token?}', 'Auth\PasswordController@showResetForm'); $this->post('password/email', 'Auth\PasswordController@sendResetLinkEmail'); $this->post('password/reset', 'Auth\PasswordController@reset'); }
. #2 configuration du fichier auth.php
Il s'agit du fichier de configuration lié à l'authentification, que beaucoup de gens peuvent ne pas comprendre. Certains concepts qu'il contient, tels que gardien et fournisseur
, ne sont fondamentalement pas documentés. Alors, qu’est-ce que la garde exactement ? Cela peut être compris comme un rôle. Chaque élément du tableau guards
est un rôle. Les rôles par défaut sont web et api, ce qui signifie que ces deux rôles utilisent actuellement le système d'authentification. Bien sûr, ces deux éléments ne répondront certainement pas à nos exigences, c'est pourquoi nous personnalisons généralement certaines protections. La personnalisation est également très simple, il suffit d'ajouter un élément au tableau guards, où le pilote indique comment enregistrer le statut de l'utilisateur pour cette authentification, généralement dans la session, et le fournisseur est un élément dans le tableau du fournisseur ci-dessous, alors quel est le fournisseur ? Du drap de laine ? C'est plus facile à comprendre. Si vous souhaitez implémenter l'authentification utilisateur, vous devez enregistrer le nom d'utilisateur et le mot de passe, n'est-ce pas ? Ensuite, le fournisseur indique à Laravel dans quelle table vos informations utilisateur sont stockées, et le pilote indique à Laravel quelle méthode utiliser pour faire fonctionner le système. base de données.
#3 Authentification
En fait, le code généré automatiquement par Laravel peut déjà répondre aux besoins de connexion et d'enregistrement, mais chaque garde a besoin un AuthController Allez, comment partager un contrôleur d'authentification ? Guard est utilisé ici car il peut représenter l'identité de l'utilisateur pour exécuter une logique différente. Cependant, cette garde ne peut pas être obtenue dans le contrôleur d'authentification, nous pouvons donc la réaliser via les paramètres de routage. Définir un groupe de routage :
Route::group(['prefix'=>'{guard}'],function(){ Route::auth();});
Dans ce groupe de routage, nous définissons le préfixe du paramètre guard, afin que la garde actuelle puisse être obtenue dans l'AuthController. Dans des circonstances normales, nous obtenons les paramètres de routage via injection de dépendances dans l'instance Request, mais il y a aussi un piège ici, c'est-à-dire qu'avant la version 5.1, les paramètres de routage pouvaient être obtenus via
$request->input('key')
j'aime ça Pour l'obtenir, mais ça ne fonctionne plus en 5.2 Il faut l'obtenir via
$request->key
, ou il peut être obtenu directement depuis l'instance de routage, je ne connais pas la raison. pour ça. Certains traits sont utilisés dans le contrôleur AuthController. Ces traits implémentent la logique d'enregistrement de l'authentification. Vous pouvez personnaliser la logique en réécrivant certaines propriétés du contrôleur. Y compris $redirectTo
et $guard
et $username
, etc. En un coup d'œil, vous pouvez dire que le premier consiste à sauter après une connexion réussie, le deuxième consiste à définir la garde actuellement utilisée et le troisième est le nom d'utilisateur utilisé pour la partie authentification. On peut donc le personnaliser en obtenant la garde dans le contrôleur d'authentification.
#4 Protection des itinéraires
一般做认证系统的,都是要来保护路由的,那么如何保护路由呢?文档里面说给需要保护的路由添加一个auth中间件,那么事实是怎样的呢?事实也确实是这样,不过文档没有说的一点是,通过auth中间件保护的路由必须还要加上web中间件、必须还要加上web中间件、必须还要加上web中间件,重要的事情要说三遍啊,不然会出现什么问题呢?不管你认证成功失败都是会跳转到/这条路由,这个大坑要注意!当然你也可以在中间件中指定guard来让Laravel知道通过那个来认证,如果没指定的话就是使用配置文件里面默认的:
Route::get('profile', [ 'middleware' => 'auth:api', 'uses' => 'ProfileController@show']);
#5 获取用户实例
通过认证后就可以通过Auth门面来获取到当前通过认证的用户实例。
$user = Auth::user();
这里还有一个要注意的是,以上的方式默认获取的是配置文件中的guard的,假如你当前登录的guard不是配置文件中的,就必须要这样子来获取:
$user = Auth::guard('guard')->user();
#6 总结
总得来说,Laravel5.2自带的Auth系统还是很好用的,只是有一些小坑文档没说清楚,用过几次之后就可以很熟悉了,可以给我们节约很多的开发时间。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
bindParam和bindValue在Yii2中的使用详解
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!