关于登陆认证部分

我用 Laravel 后台和前台分离。
这时我想用laravel自带的Auth来认证。
可Auth::attempt默认指向 users表,default里我再加一个guards
如下

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

不修改defaults的情况下 我怎么用Auth::attempt来指向 admins 这个表呢?

JellyBool
Auth::guard('admin')->check()

这样?你看看这个:

https://www.laravist.com/series/what-is-new-in-laravel-5-2-series/episodes/6

oileme 回复 JellyBool

视频的结果是我想要的,但是过程太复杂,我只是想用Auth::attempt来认证
比如官方提供的手动认证

if(Auth::attempt($request->only('username','password'))){
    return redirect('/admin/dashboard');
}

我只想 这么用,简单的手动认证
但官方给的资料就一个这个命令
我用那个方法,就一直提示

SQL: select * from `tb_users` where `username` = adminter limit 1

但我的是 tb_admins 这个表 不是 tb_users 这个表
除非我在auth.php里的 default 改过来。
但改了又验证不了 tb_users表。

Auth::guard('admin')->attempt(...)

这个尝试过也没用。因为官方提供Auth所以不自己开发 想拿手用用 却被陷入坑了。

oileme 回复 JellyBool

Jelly 你是否讲一下 laravel的 手动认证部分?
在官方文档 看了好久 还是没能成功

oileme

不好意思,刚才解决了问题,还是复制了下。
手动认证实在搞不懂。

为了怕别的同学也会掉坑,分享下。

1.登陆控制器部分

namespace App\Http\Controllers\Admin;

use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends BeforeController
{// 这里的Before别管 是自己添加的 公共控制器,暂时是个空的,是用 ThinkPHP 的习惯
    use AuthenticatesUsers;
    protected $redirectTo = 'admin';// 登陆后跳转
    public function login()
    {
        return view('admin.login');
    }
    protected function guard()
    {
        return auth()->guard('admin');// 使用新添加的Guard
    }
    public function username()
    {
        return 'username';// 检测的用户名字段,数据库里用户名字段为uid 那么这里改下uid就行
    }
}

2.Kernel里 添加

'auth.admin' => \App\Http\Middleware\AuthAdmin::class,

3.添加 Middleware

namespace App\Http\Middleware;

use Closure;

class AuthAdmin
{
    public function handle($request, Closure $next)
    {
        if (auth()->guard('admin')->guest()) {// 刚才添加的Guard的名字
            return redirect()->guest('admin/login');// 没有登陆直接跳转登陆页面
        }
        return $next($request);
    }
}

4.路由添加

Route::get('admin/login','Admin\LoginController@show');
Route::post('admin/login','Admin\LoginController@login');
Route::group(['prefix' => 'admin','middleware' => 'auth.admin'],function(){
   Route::get('/',function(){
      $aa = \Illuminate\Support\Facades\Auth::guard('admin')->user();
      return dd($aa);
   });
});

忘了写Guard部分了,下面是Guard部分

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [// 新添加
            'driver' => 'session',
            'provider' => 'admins',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'admins' => [// 新添加
            'driver' => 'eloquent',
            'model' => App\Http\Models\Admins::class,
        ],
    ],