Laravel 登陆认证 访问指定的 Guard 实例 Admin认证

版权声明:本文为博主原创文章,如需转载请与博主联系。 https://blog.csdn.net/MShow006/article/details/81585234

使用 Auth 门面的 guard 方法指定想要使用的 guard 实例,这种机制允许你在同一个应用中对不同的认证模型或用户表实现完全独立的用户认证。

一 、配置

该功能可用于为不同表的不同类型用户(同一个表不同类型用户理论上也可以)实现隔离式登录提供了方便,我们只要为每张表配置一个独立的 guard 就可以了。比如我们除了 users 表之外还有一张 admins 表用于存放后台管理员,要实现管理员的单独登录,就可以这么配置 auth.php 配置文件:

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

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

    'admin' => [
        'driver' => 'session', // 用户信息存到session里
        'provider' => 'admins', // 添加admin provider
    ]
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class, // 这里对应的是User模型(默认)
    ],

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class, // 这里对应的是Admin模型
    ],
],

auth.php配置完成后,还需要在Admin模型里修改

<?php

namespace App\Models; // 注意要和自己定义的模型命名空间一致

use Illuminate\Foundation\Auth\User as Authenticatable; // 注意这里要和User模型一样

// 这里也要和User模型一样
class Admin extends Authenticatable 
{
  protected $fillable = [
    'name', 'password'
  ];
}

二、重定向未认证用户

auth 中间件判定某个用户未认证,会返回一个 JSON 401 响应,或者,如果不是 Ajax 请求的话,将用户重定向到 login 命名路由(也就是登录页面)

注意:Laravel 默认的重定向路由是‘/home’

可以通过在 app/Exceptions/Handler.php 文件中定义一个 unauthenticated 方法来改变这一行为:

use Illuminate\Auth\AuthenticationException;

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
                ? response()->json(['message' => $exception->getMessage()], 401)
                : redirect()->guest(route('login')); // 这里指定重定向后的路由
} 

三、使用

Route::group(['middleware' => 'auth:admin'], function(){
  // 这个group里的路由必须通过我们定义的 auth:admin 进行验证
}

Laravel 登陆认证 访问指定的 Guard 实例

使用 Auth 门面的 guard 方法指定想要使用的 guard 实例,这种机制允许你在同一个应用中对不同的认证模型或用户表实现完全独立的用户认证。

@toc

一 、配置

该功能可用于为不同表的不同类型用户(同一个表不同类型用户理论上也可以)实现隔离式登录提供了方便,我们只要为每张表配置一个独立的 guard 就可以了。比如我们除了 users 表之外还有一张 admins 表用于存放后台管理员,要实现管理员的单独登录,就可以这么配置 auth.php 配置文件:

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

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

    'admin' => [
        'driver' => 'session', // 用户信息存到session里
        'provider' => 'admins', // 添加admin provider
    ]
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class, // 这里对应的是User模型(默认)
    ],

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class, // 这里对应的是Admin模型
    ],
],

auth.php配置完成后,还需要在Admin模型里修改

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable; // 注意这里要和User模型一样

// 这里也要和User模型一样
class Admin extends Authenticatable 
{
  protected $fillable = [
    'name', 'password'
  ];
}

二、重定向未认证用户

auth 中间件判定某个用户未认证,会返回一个 JSON 401 响应,或者,如果不是 Ajax 请求的话,将用户重定向到 login 命名路由(也就是登录页面)

注意:Laravel 默认的重定向路由是‘/home’

可以通过在 app/Exceptions/Handler.php 文件中定义一个 unauthenticated 方法来改变这一行为:

use Illuminate\Auth\AuthenticationException;

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
                ? response()->json(['message' => $exception->getMessage()], 401)
                : redirect()->guest(route('login')); // 这里指定重定向后的路由
} 

三、使用

web.php:

Route::group(['middleware' => 'auth:admin'], function(){
  // 这个group里的路由必须通过我们定义的 auth:admin 进行验证
}

登录:

public function login(Request $request) {
  $user = $this->validate($request, [
    'name' => 'required|max:50',
    'password' => 'required|min:5',
  ]);    
  if (Auth::guard('admin')->attempt($user)) { // 登陆验证
    return redirect()->route('admin.index');
  } else {
   session()->flash('danger', '很抱歉,您的用户名和密码不匹配');
    return redirect()->back()->withInput($request->input());
  } 
}

获取当前认证用户:

use Illuminate\Support\Facades\Auth;

// 获取当前认证用户...
$user = Auth::guard('admin')->user();

// 获取当前认证用户的ID...
$id = Auth::guard('admin')->id();

退出登录:

  Auth::guard('admin')->logout(); // 退出

猜你喜欢

转载自blog.csdn.net/MShow006/article/details/81585234