Buscar..


Autenticación múltiple

Laravel te permite usar múltiples tipos de autenticación con guardias específicos.

En laravel 5.3 la autenticación múltiple es un poco diferente de Laravel 5.2

Explicaré cómo implementar la característica de autenticación múltiple en 5.3.

Primero necesitas dos modelos de usuario diferentes

cp App/User.php App/Admin.php

cambie el nombre de la clase a Admin y establezca el espacio de nombres si utiliza modelos diferentes. debería parecerse a

App \ Admin.php

<?php

namespace App;

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

class Admin extends Authenticatable
{
    use Notifiable;

    protected $fillable = ['name', 'email', 'password'];
    protected $hidden   = ['password', 'remember_token'];

}

También necesitas crear una migración para admin.

php artisan make:migration create_admins_table

A continuación, edite el archivo de migración con el contenido de la migración de usuarios predeterminada. Se ve como esto

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAdminsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');        
            $table->rememberToken();
            $table->timestamps();

            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('admins');
    }
}

Editar config / auth.php

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

        'api'   => [
            'driver'   => 'token',
            'provider' => 'users',
        ],
        //Add Admin Guard
        'admin' => [
            'driver'   => 'session',
            'provider' => 'admins',
        ],
    ],

y

'providers' => [
        'users'  => [
            'driver' => 'eloquent',
            'model'  => App\User::class,
        ],
        //Add Admins Provider
        'admins' => [
            'driver' => 'eloquent',
            'model'  => App\Admin::class,
        ],
    ],

Tenga en cuenta que añadimos dos entradas. uno en guardias variable uno en proveedores variable.

Y así es como usas el otro guardia luego "web".

Mi aplicación \ Http \ Controllers \ Admin \ LoginController

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{

    use AuthenticatesUsers;

    protected $guard = 'admin';

    protected $redirectTo = '/admin/';

    public function showLoginForm()
    {
        return view('admin.login');
    }

    protected function guard()
    {
        return Auth::guard($this->guard);
    }

}

esto necesita poca explicación.

en pocas palabras, Auth :: guard ('admin') le permitirá utilizar métodos de autenticación (como inicio de sesión, cierre de sesión, registro, etc.) con su administrador admin.

Por ejemplo

Auth::guard('admin')->login($user)

buscará $ usuario en la tabla de administradores e iniciará sesión con el usuario mientras

Auth::login($user)

Trabajará normalmente con la tabla de usuarios. La protección predeterminada se especifica en config / auth.php con la matriz predeterminada . En fresco laravel es "web".

En el controlador, debe implementar métodos de AuthenticatesUsers para mostrar sus rutas de visualización personalizadas. Y necesita implementar otras funciones como guardia para usar sus nuevas protecciones de usuario.

En este ejemplo, mi inicio de sesión de administrador es admin / login.blade

Y al implementar la función guard () para devolver Auth :: guard ('admin'), todos los métodos de rasgos de AuthenticatesUsers funcionan con "admin" guard.

En versiones anteriores de laravel, esto es un poco diferente de la versión 5.3.

en 5.2 la función getGuard devuelve la variable $ guard de la clase y la función principal (inicio de sesión) úsala en

Auth::guard($guard)->attempt(...)

en 5.3 la función de guarda devuelve todo Auth :: guard () y la función principal la usa como

$this->guard()->attempt(...)


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow