Maison  >  Article  >  cadre php  >  Partagez 9 conseils liés à l’échafaudage Laravel Auth

Partagez 9 conseils liés à l’échafaudage Laravel Auth

藏色散人
藏色散人avant
2020-08-27 13:42:433028parcourir
Ce qui suit est

Partagez 9 conseils liés à l’échafaudage Laravel Auth La colonne du didacticiel partagera 9 conseils liés à l'échafaudage Partagez 9 conseils liés à l’échafaudage Laravel Auth Auth, j'espère que cela sera utile aux amis dans le besoin !

Partagez 9 conseils liés à l’échafaudage Laravel Auth

Partagez 9 conseils liés à l’échafaudage Laravel Auth dispose d'un excellent système d'authentification des utilisateurs prêt à l'emploi, bien sûr, nous devons également personnaliser certaines configurations à certains endroits. Pour certaines configurations personnalisées, nous n'avons pas besoin de trouver un pack d'extension ou d'écrire beaucoup de code. Jetons un coup d'œil aux fonctionnalités intéressantes cachées derrière ce système d'authentification.

Astuce 1. Paramètres Auth::routes()

Nous devrions tous savoir que la méthode

vient du Auth::routes()Package Partagez 9 conseils liés à l’échafaudage Laravel Auth UI (Avant Partagez 9 conseils liés à l’échafaudage Laravel Auth 7, c'était inclus dans le noyau).

Mais saviez-vous qu'il peut accepter un tableau pour activer/désactiver des routes d'authentification spécifiques ?

Pour Partagez 9 conseils liés à l’échafaudage Laravel Auth 7, voici les paramètres disponibles et leurs valeurs par défaut :

Auth::routes([
    'login'    => true, 
    'logout'   => true, 
    'register' => true, 
    'reset'    => true,   // 用于重置密码
    'confirm'  => false,  // 用于额外的密码确认
    'verify'   => false,  // 用于邮箱认证
]);

Ces paramètres activent ou désactivent uniquement certaines routes.

Pour comprendre comment ils fonctionnent, vous pouvez consulter la documentation

AuthRouteMethods dans Partagez 9 conseils liés à l’échafaudage Laravel Auth UI :

return function ($options = []) {
    // 登录路由...
    if ($options['login'] ?? true) {
        $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
        $this->post('login', 'Auth\LoginController@login');
    }

    // 登出路由...
    if ($options['logout'] ?? true) {
        $this->post('logout', 'Auth\LoginController@logout')->name('logout');
    }

    // 注册路由...
    if ($options['register'] ?? true) {
        $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
        $this->post('register', 'Auth\RegisterController@register');
    }

    // 密码重设路由...
    if ($options['reset'] ?? true) {
        $this->resetPassword();
    }

    // 密码确认路由...
    if ($options['confirm'] ??
        class_exists($this->prependGroupNamespace('Auth\ConfirmPasswordController'))) {
        $this->confirmPassword();
    }

    // 邮箱验证路由...
    if ($options['verify'] ?? false) {
        $this->emailVerification();
    }
};


Astuce 2. Partagez 9 conseils liés à l’échafaudage Laravel Auth UI : générer des contrôleurs uniquement

La documentation officielle précise les principales façons d'utiliser l'interface utilisateur de Partagez 9 conseils liés à l’échafaudage Laravel Auth :

php artisan ui vue --auth

Mais que faire si vous n'avez pas besoin d'une interface utilisateur visuelle ? Que se passe-t-il si vous créez un projet API uniquement sans aucune interface dans le framework ?

Vous pouvez toujours utiliser Partagez 9 conseils liés à l’échafaudage Laravel Auth Auth et ses contrôleurs. Installez Partagez 9 conseils liés à l’échafaudage Laravel Auth UI et exécutez la commande suivante :

php artisan ui:controllers

Elle ne générera que

, vous n'avez donc pas besoin de fichiers Blade ou Vue pour les utiliser. app/Http/Controllers/Auth

Voir l'implémentation de cette commande Artisan dans le

Dépôt Github.


Astuce 3. Réauthentifier les mots de passe pour les opérations sensibles

Avez-vous déjà maintenu un référentiel Github et essayé de modifier ses paramètres d'accès ? Github vous demande ensuite de saisir à nouveau votre mot de passe pour vous assurer qu'il s'agit bien de vous.

À partir de Partagez 9 conseils liés à l’échafaudage Laravel Auth 6.2, cette fonctionnalité est également intégrée au framework.

Partagez 9 conseils liés à l’échafaudage Laravel Auth

Il vous suffit d'ajouter un middleware nommé

à la route que vous souhaitez protéger. password.confirm

Route::get('/secrets', 'SecretsController@show')->middleware('password.confirm');

Dries Vints Cité de l'article officiel :

Si vous essayez d'accéder à cet itinéraire, vous serez invité pour confirmer votre mot de passe, et identique à celui vu sur d'autres applications comme GitHub.

Après avoir confirmé un mot de passe, un horodatage est stocké par défaut dans la session utilisateur. L'horodatage dure

3 heures l'utilisateur n'a donc pas besoin de saisir à nouveau son mot de passe pendant cette période.

Vous pouvez personnaliser cette durée à l'aide des options de configuration

dans le fichier de configuration auth. password_timeout


Astuce 4. Déconnectez-vous des autres appareils

Depuis Partagez 9 conseils liés à l’échafaudage Laravel Auth 5.6, nous proposons une méthode distincte pour vous déconnecter automatiquement de tout autre appareil connecté avec notre compte ou Navigateur :

Auth::logoutOtherDevices($password);

L'utilisation typique consiste à se déconnecter des autres appareils après s'être connecté avec succès sur l'appareil actuel. Pour ce faire, on remplace la méthode

de Trait AuthenticatesUsers.php et on la met dans authenticated() : app / Http / Controllers / Auth / LoginController.php

protected function authenticated(Request $request, $user)
{
    \Auth::logoutOtherDevices(request('password'));
}

N'oubliez pas non plus d'activer le middleware

dans le fichier app / Http / Kernel.php , par défaut ce middleware est commenté : AuthenticateSession

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],


Redirection après connexion/inscription : logique personnalisée

Par défaut, LoginController et RegisterController de Partagez 9 conseils liés à l’échafaudage Laravel Auth ont les mêmes attributs :

class RegisterController extends Controller
{
    protected $redirectTo = RouteServiceProvider::HOME;

Vous pouvez ainsi spécifier l'URL vers laquelle rediriger après une connexion/inscription réussie. La valeur par défaut est en

: app/Providers/RouteServiceProvider.php

class RouteServiceProvider extends ServiceProvider
{
    public const HOME = '/home';

Comment la personnaliser ?

Tout d'abord, vous pouvez spécifier d'autres valeurs pour les attributs

des contrôleurs de connexion et d'enregistrement respectivement. $redirectTo

Mais que se passe-t-il si vous avez une logique de redirection

dynamique plus complexe qui doit être basée sur le rôle de l'utilisateur, par exemple ?

您可以在身份验证控制器中创建一个redirectTo()方法,然后在其中指定条件。该方法将覆盖$ redirectTo属性的任何值。

参见示例:

class RegisterController extends Controller
{
    protected $redirectTo = RouteServiceProvider::HOME;

    protected function redirectTo()
    {
        if (auth()->user()->role_id == 1) {
            return '/admin';
        }
        return '/home';
    }

技巧 5. 快速创建新用户

如果您需要创建一个新用户,但还没有准备好注册页面该怎么办?

只需在您的终端中打开 Partagez 9 conseils liés à l’échafaudage Laravel Auth Tinker

php artisan tinker

如果您不熟悉 Tinker,需要知道它是能够执行任何 Partagez 9 conseils liés à l’échafaudage Laravel Auth / PHP 代码的命令行工具。因此,在其中,您可以轻松创建用户,键入此 Eloquent 命令并按 Enter:

\App\User::create(['name' => 'Admin', 'email' => 'admin@admin.com', 'password' => bcrypt('somesecurepassword')]);

但是,如果您需要创建许多用户进行测试,例如10、100或1000,该怎么办?没问题,我们可以在database / factories / UserFactory.php中使用 Partagez 9 conseils liés à l’échafaudage Laravel Auth 默认提供的 Factory 类:

$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // 密码
        'remember_token' => Str::random(10),
    ];
});

这些是我们创建的“假”用户的默认值。为此,我们将生成一个 Seeder 文件:

php artisan make:seeder UsersSeeder

然后,我们打开生成的文件database / seeds / UsersSeeder.php,并用以下代码填充run()方法:

public function run()
{
    // This will create 100 users
    factory(App\User::class, 100)->create(); 
}

要运行它,我们需要执行以下命令:

php artisan db:seed --class=UsersSeeder

您可以在Partagez 9 conseils liés à l’échafaudage Laravel Auth官方文档中了解更多有关数据库种子的信息。


Tip 6. 使用邮箱和/或用户名登录

默认情况下,Partagez 9 conseils liés à l’échafaudage Laravel Auth用户使用邮箱密码进行身份验证。但是,如果您的用户标识不使用邮箱怎么办?例如,使用用户名作为标识。

您可以通过覆盖 traitAuthenticatesUsers.php中的一种方法来轻松更改它。

这是默认值:

trait AuthenticatesUsers
{
    // ... 其他方法

    public function username()
    {
        return 'email';
    }

您可以将其复制到您的LoginController.php中,只需更改值即可:

class LoginController extends Controller
{
    use AuthenticatesUsers;

    // ... 其他方法

    public function username()
    {
        return 'username';
    }
}

让我们更进一步。如果您想让用户可以使用邮箱或用户名登录怎么办?这样的话,用户可以在“邮箱/用户名”字段中选择其中一个填写。

让我们向上面的username()方法添加一个判断。我们检查输入的字符串是否是电子邮件,若不是,则将其视为用户名。这是一个 PHP 函数,甚至不是 Partagez 9 conseils liés à l’échafaudage Laravel Auth 函数。

class LoginController extends Controller
{
    // ...

    public function username()
    {
        return filter_var(request('email'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
    }
}

注意: 别忘了把登录表单的  input type="email" 改成 type="text"


Tip 7.登录请求频繁:自定义参数

如果您尝试在同一分钟内使用无效凭据登录五次以上,则请求会被拦截,并显示一条消息尝试登录的次数过多。 请在X秒后重试。

该拦截操作将持续1分钟,并且对于用户的用户名/电子邮件及其IP地址是唯一的。

您可以自定义这些参数:

  • 一分钟内的无效尝试次数(默认为五次尝试)
  • 阻止登录的分钟数(默认为1分钟)

这两个参数在TraitThrottlesLogins内部:

trait ThrottlesLogins
{
    // ... other methods

    /**
     * Get the maximum number of attempts to allow.
     *
     * @return int
     */
    public function maxAttempts()
    {
        return property_exists($this, 'maxAttempts') ? $this->maxAttempts : 5;
    }

    /**
     * Get the number of minutes to throttle for.
     *
     * @return int
     */
    public function decayMinutes()
    {
        return property_exists($this, 'decayMinutes') ? $this->decayMinutes : 1;
    }
}

因此,要覆盖这些属性,可以在 LoginController 内部指定属性:

class LoginController extends Controller
{
    protected $maxAttempts = 3;  // Default is 5
    protected $decayMinutes = 2; // Default is 1

    // ...
}

Tip 8. 注册: 禁用自动登录

默认情况下,新注册的用户将自动登录并重定向到主页。

如果您需要禁用该功能并改为显示注册成功页面,而不自动登录的话,可以执行以下操作。

原始注册方法位于 Trait RegistersUsers 的内部:

trait RegistersUsers
{
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        if ($response = $this->registered($request, $user)) {
            return $response;
        }

        return $request->wantsJson()
                    ? new Response('', 201)
                    : redirect($this->redirectPath());
    }

因此,您的目标是在RegisterController中覆盖它,然后重定向到新页面,而不是登录:

class RegisterController extends Controller
{
    use RegistersUsers;

    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        return redirect()->route('your_success_page_route_name');
    }

Tip 9. 登录: 通过电子邮件/密码进行附加检查

如果除了默认的电子邮件和密码外,还需要进行其他检查,该怎么办? 例如,您要检查用户是否处于活动状态或未被禁止。

您可以添加额外的字段 credentials 到定义在 AuthenticatesUsers trait 的鉴权数组中:

trait AuthenticatesUsers
{
    // ...

    protected function credentials(Request $request)
    {
        return $request->only($this->username(), 'password');
    }

然后只需要重写 LoginController 即可:

class LoginController extends Controller
{
    // ...

    protected function credentials(Request $request)
    {
        return $request->only($this->username(), 'password') + ['is_active' => 1];
    }

注意: 这是一个很有趣的便捷提示,但是我建议您在单独的中间件中执行这种额外的检查,然后向用户提供更明确的错误消息,而不是默认的凭证错误。


就是这些,都是一些便捷提示,但是自定义代码和外部扩展包还有很多可以发挥的地方。 因此,可以继续关注有关该主题的更多文章!

原文地址:https://laravel-news.com/laravel-auth-tips

译文地址:https://learnku.com/laravel/t/48905

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer