1
votes

Connexion et enregistrement personnalisés avec auth laravel 5.7

J'essaye de créer le premier projet avec Laravel 5.7 .

Dans ce projet, j'ai trois zones différentes avec trois identifiants différents (ex. connexion pour les utilisateurs, connexion pour l'administrateur, connexion pour les techniciens).

Maintenant, je voudrais personnaliser le premier login (url, html, input, class, db table, db column ecc ...) mais je ne sais pas comment faire.

L ' URL de la première connexion est website.com/public/users

Ma Table est:

<form method="POST" action="{{ asset('/users') }}">
@csrf
  <div class="form-group">
    <input type="email" class="form-control" name="gf_email" id="gf_email" placeholder="Email" required>
  </div>
  <div class="form-group">
    <input type="password" class="form-control" name="gf_password" id="gf_password" placeholder="Password" required>
  </div>
  <button type="submit" class="btn btn-primary">LOGIN</button>
</form>

J'ai beaucoup cherché et avec les informations que j'ai trouvées, j'ai essayé de faire ceci:

config / auth.php :

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class GFUsers extends Authenticatable
{
    use Notifiable;

    protected $table = 'gf_users';
    protected $primaryKey = 'gf_id';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'gf_email', 'gf_password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'gf_password'
    ];


    public function getAuthPassword(){
        return $this->gf_password;
    }
}


8 commentaires

config / auth.php garde personnalisée manquante pour gf_user.L'enregistrement est simple mais l'authentification vous prendra un certain temps


Une question par question


Peut-être que ce serait mieux lors de la révision du code


La meilleure façon de créer une seule table pour l'utilisateur et de gérer une autre table pour le rôle et une autre table pour leur mappage et de créer un seul utilisateur qui vérifiera le rôle de l'utilisateur et redirigera l'utilisateur en conséquence


@MayankPandeyz mais mon problème est de savoir comment faire une connexion personnalisée dans laravel.


@LimKeanPhang pouvez-vous m'aider à créer une garde personnalisée pour gf_user? ou du moins comprendre comment je peux le faire.


'gfusers' => ['driver' => 'session', 'provider' => 'gfusers',], @Giu, Copiez simplement celui par défaut et faites quelques modifications


@LimKeanPhang ok, j'ai ajouté le garde, merci.


3 Réponses :


0
votes

Il vaut mieux ne pas créer de tableaux différents pour les utilisateurs, les administrateurs et les techniciens. Ils étaient tous censés être des utilisateurs. Dans une table et juste avec des attributs différents (par exemple - role, statuss, is_admin, is_user ...).


2 commentaires

Ok, mais je ne sais pas comment faire une connexion personnalisée dans laravel.


En fait, je n'ai pas compris pourquoi vous en avez besoin sur mesure. La fonctionnalité de connexion et d'enregistrement par défaut fonctionne-t-elle ou non? Il est relativement facile d'écraser les méthodes de contrôleur de connexion par défaut. Si la connexion par défaut fonctionne que dans le fichier de route, vous avez quelque chose comme ceci - Auth :: routes () ;. Au lieu de cette ligne, vous pouvez trouver où (vendor / laravel / framework / src / Illuminate / Routing / Router‌ .php) est défini ces routes d'authentification et les écrire classiquement dans le fichier de route. Cela permettrait de changer l'URI de / login à / public / users.



1
votes

config/auth.php:

Auth::guard('gfuser')->login($user); //array data with username and password
OR
if (Auth::guard('gfuser')->attempt(['username' => $username, 'password' => $password]) {//Redirect to dashboard}

LoginController

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],

        'gfuser' => [
            'driver' => 'session',
            'provider' => 'gfuser',
        ],
    ],

    'providers' => [
        'gfuser' => [
            'driver' => 'eloquent',
            'model' => App\GFUsers::class
        ],
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];


2 commentaires

Ok, la première partie est claire. Pour LoginController, dois-je mettre ce code dans une fonction? Par exemple public function login () {Auth :: guard ('gfuser') -> login ($ user); }


Oui. Vous pouvez créer une fonction avec une demande pour obtenir un nom d'utilisateur et un mot de passe. Il y a plusieurs façons de le faire laravel.com/docs/5.7/…



1
votes

Après de longues recherches, j'ai trouvé ma solution. J'espère que cela pourra aider quelqu'un d'autre.
J'ai personnalisé: id, nom d'utilisateur, mot de passe et jeton de mémoire dans le tableau et les fichiers User.php, LoginController.php.

==Table==:

<?php

return [


    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],


    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
        
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\NewUser::class
        ],

        //'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];

<form method="POST" action="{{ asset('/users') }}">
@csrf
  <div class="form-group">
    <input type="email" class="form-control" name="input-email" id="input-email" placeholder="Email" required>
  </div>
  <div class="form-group">
    <input type="password" class="form-control" name="input-password" id="input-password" placeholder="Password" required>
  </div>
  <button type="submit" class="btn btn-primary">LOGIN</button>
</form>

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;
    protected $table = 'gf_users';
    protected $primaryKey = 'gf_id';
    public $timestamps = false; 
    
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'gf_email', 'gf_password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'gf_password', 'gf_remember_token',
    ];
    
    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword(){
        return $this->gf_password;
    }
    
    /**
     * Get the token value for the "remember me" session.
     *
     * @return string
     */
    public function getRememberToken()
    {
        return $this->gf_remember_token;
    }
    
    /**
     * Set the token value for the "remember me" session.
     *
     * @param  string  $value
     * @return void
     */
    public function setRememberToken($value)
    {
        $this->gf_remember_token = $value;
    }
    
    /**
     * Get the column name for the "remember me" token.
     *
     * @return string
     */
    public function getRememberTokenName()
    {
        return 'gf_remember_token';
    }
    
    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail()
    {
        return $this->gf_email;
    }
}


0 commentaires