方法 Illuminate\Auth\RequestGuard::attempt 不存在
Posted
技术标签:
【中文标题】方法 Illuminate\\Auth\\RequestGuard::attempt 不存在【英文标题】:Method Illuminate\Auth\RequestGuard::attempt does not exist方法 Illuminate\Auth\RequestGuard::attempt 不存在 【发布时间】:2018-08-08 03:44:09 【问题描述】:我是 laravel 和 lumen 的新手。 我在 lumen 5.6 中使用 oauth2.0 创建了一个登录 api,我已经安装了护照并生成了令牌。 下面是我的登录控制器功能,它工作正常。它返回令牌。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Route;
//use Illuminate\Support\Facades\DB;
use App\User;
use Auth;
public function login(Request $request)
global $app;
$proxy = Request::create(
'/oauth/token',
'post',
[
'grant_type' => env('API_GRAND_TYPE'),
'client_id' => env('API_CLIENT_ID'),
'client_secret' => env('API_CLIENT_SECRET'),
'username' => $request->username,
'password' => $request->password,
]
);
return $app->dispatch($proxy);
由于除了用户名和密码之外,我还必须检查用户状态,因此我需要先检查用户凭据。所以我喜欢这个。
public function login(Request $request)
$credentials = $request->only('username', 'password');
if (Auth::attempt($credentials))
return ['result' => 'ok'];
return ['result' => 'not ok'];
Here i am getting this error.
Method Illuminate\Auth\RequestGuard::attempt does not exist.
So i tried Auth::check instead of Auth::attempt.
Now there is no error but it always return false even though the credentials are valid.
I searched a lot for a solution but i didn't get.
【问题讨论】:
任何解决方案...? 【参考方案1】:功能守卫仅适用于带有网络中间件的路由
public function login()
if(Auth::guard('web')->attempt(['email' => $email, 'password' => $password], false, false)) requests
// good
else
// invalid credentials, act accordingly
【讨论】:
问题是像 spatie/laravel-permission 这样的包函数在 api 上工作,所以我认为我们应该将 api 和 web 混合用于 RESTFUL 应用程序 注意:使用@Samuel Dervis 解决方案时,不要忘记从'middleware' => 'auth: api'
删除您的登录路径,如果它在里面。守卫方法也接受api参数,为Auth::guard('api')
,但我目前在使用时遇到了困难。
在我的例子中,我的控制器类被命名为Auth
。所以我必须为Illuminate\Support\Facades\Auth
创建一个别名。
救命,谢谢,我刚刚用它创建了一个新方法,以避免损坏我当前使用的 api auth 方法,并且像一个魅力一样工作【参考方案2】:
将默认保护更改为“web”解决了我的问题。
配置/auth.php:
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
【讨论】:
这在使用多个守卫和一个包 laravel spatie 进行权限管理时会出现问题。以上是关于方法 Illuminate\Auth\RequestGuard::attempt 不存在的主要内容,如果未能解决你的问题,请参考以下文章
GroovyGroovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )