Cette fois, je vais vous apporter une analyse de cas du système d'authentification multi-utilisateurs Laravel. Quelles sont les précautions lors de l'utilisation du système d'authentification multi-utilisateurs Laravel. Ce qui suit est un cas pratique, prenons. un regard.
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, l'authentification peut être réalisée 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. en tant 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 fonctionner. la 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 l'injection de dépendances dans l'instance Request, mais il y a aussi un piège ici. Avant la version 5.1, les paramètres de routage pouvaient être obtenus via
$request->input('key')
. comme ça pour l'obtenir, mais cela ne fonctionne plus en 5.2. Il doit être obtenu via
$request->key
, ou il peut être obtenu directement à partir de l'instance de routage. 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中文网其它相关文章!
推荐阅读:
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!