Laravel护照多重认证有问题

问题描述

我正在尝试使用护照认证通行证对laravel进行多重认证。但是它显示每次用于管理员身份验证。我尝试了很多次,但无法进行身份验证。请帮忙。

这是我的管理员

class Admin extends Authenticatable
{
    use Notifiable,HasApiTokens;

    protected $guard = 'admin';

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

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

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',];
}

这是auth.PHP文件

<?PHP

return [

    'defaults' => [
        'guard' => 'web','passwords' => 'users',],'guards' => [
        'web' => [
            'driver' => 'session','provider' => 'users','api' => [
            'driver' => 'passport','hash' => false,'admin-api' => [
            'driver' => 'passport','provider' => 'admin','admin' => [
            'driver' => 'session','providers' => [
        'users' => [
            'driver' => 'eloquent','model' => App\User::class,'admin' => [
            'driver' => 'eloquent','model' => App\Admin::class,// 'users' => [
        //     'driver' => 'database',//     'table' => 'users',// ],'passwords' => [
        'users' => [
            'provider' => 'users','table' => 'password_resets','expire' => 60,'throttle' => 60,'admin' => [
            'provider' => 'admin',

这是api.PHP

Route::post('loginEmp','AdminController@login');
Route::post('registerEmp','AdminController@register');
Route::post('detailsEmp','AdminController@details')->middleware('auth:admin-api');

这是管理员>

class AdminController extends Controller
{
    public $successstatus = 200;
    /**
     * login api
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function login(){
        if(Auth::guard('admin')->attempt(['email' => request('email'),'password' => request('password')])){
            $user = Auth::guard('admin');
            $success['token'] =  $user->createtoken('MyApp')-> accesstoken;
            return response()->json(['success' => $success],$this-> successstatus);
        }
        else{
            return response()->json(['error'=>'Unauthorised'],401);
        }
    }

    /**
     * Register api
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function register(Request $request)
    {
        $validator = Validator::make($request->all(),[
            'name' => 'required','email' => 'required|email','password' => 'required','c_password' => 'required|same:password',]);
        if ($validator->fails()) {
            return response()->json(['error'=>$validator->errors()],401);
        }
        $input = $request->all();
        $input['password'] = bcrypt($input['password']);
        $user = Admin::create($input);
        $success['token'] =  $user->createtoken('MyApp')-> accesstoken;
        $success['name'] =  $user->name;
        return response()->json(['success'=>$success],$this-> successstatus);
    }

    /**
     * details api
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function details()
    {
        $user = Auth::guard('admin-api');
        return response()->json(['success' => $user],$this-> successstatus);
    }
}

登录时出现错误

BadMethodCallException: Method Illuminate\Auth\SessionGuard::createtoken does
 not exist. in file C:\xampp\htdocs\MultiAuthApi\vendor\laravel\framework
\src\Illuminate\Support\Traits\Macroable.PHP on line 103

解决方法

您的App\Admin模型必须实现Illuminate\Contracts\Auth\Authenticatable接口。 App\User模型已经实现了此目的,因为它扩展了实现接口的Illuminate\Foundation\Auth\User

也许您也希望将App\Admin模型扩展为Illuminate\Foundation\Auth\User

,

我知道了。我只需要在user()的末尾添加$user = Auth::guard('admin'); 两种身份验证现在都可以正常工作。