【问题标题】:Call to undefined method Illuminate\Auth\TokenGuard::attempt() in laravel在 laravel 中调用未定义的方法 Illuminate\Auth\TokenGuard::attempt()
【发布时间】:2020-07-06 19:18:47
【问题描述】:

我正在使用 Laravel 6.x 和护照包。 在安装此软件包之前,我在 App\User 中使用了 api_token。 现在我想用护照包对用户进行身份验证,但我遇到了这个错误,

调用未定义的方法 Illuminate\Auth\TokenGuard::attempt()

这是我的守卫:

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

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

这是我的 authController:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class AuthController extends Controller
{
    private $successStatus=200;
    public function login(){
        if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
            $user = Auth::user();
            $success['token'] =  $user->createToken('MyApp')-> accessToken;
            return response()->json(['success' => $success], $this-> successStatus);
        }
        else{
            return response()->json(['error'=>'Unauthorised'], 401);
        }
    }

}

【问题讨论】:

  • 使用session 驱动程序。 attempt 方法来自 SessionGuard
  • @TsaiKoga 看到这个网址请medium.com/techcompose/…
  • 但是passport的guard没有attempt的方法,你可以这样试试:Auth::guard('api')-&gt;attempt(['...']); Auth::guard('web')-&gt;attempt(['...']);。这里是SessionGuard's attempt-methodRequest GuardTokenGuard
  • 我认为你提供的链接使用的是'defaults' =&gt; ['guard' =&gt; 'web'...]

标签: php laravel


【解决方案1】:

我把控制器改成了这个,问题就解决了

   <?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class AuthController extends Controller
{
    public function login(Request $request){



        $user = User::whereEmail($request->email)->first();

        if($user && Hash::check($request->password, $user->password)){
            $success['token'] =  $user->createToken('tp_@1')-> accessToken;
            return response()->json(['success' => $success],200);
        }
        else{
            return response()->json(['status'=>'invalid username or pass !'], 401);
        }
    }

}

【讨论】:

    【解决方案2】:

    您可能有以下配置:

    更改您的auth.php

    passporttoken

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

    【讨论】:

    • 好的,谢谢,但是,你确定吗?我想用护照包!
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 2016-06-25
    • 2018-08-08
    • 2020-04-07
    • 1970-01-01
    • 2019-12-21
    • 2020-01-24
    • 2021-08-02
    相关资源
    最近更新 更多