我是PHP和Laravel框架的新手,我正在疯狂地尝试实现以下任务。
我正在尝试按照本教程来实现自定义用户提供程序:
https://blog.georgebuckingham.com/laravel-52-auth-custom-user-providers-drivers/
我正在使用Larave 5.3版本。
我简单解释一下我需要什么:我的Laravel应用程序只是一个前端应用程序,所有的业务逻辑,包括用户身份验证,都是由一个暴露REST Web 服务的Java 后端应用程序执行的。
执行呼叫:
http://localhost:8080/Extranet/login
并将用户名和密码作为基本身份验证传递,我获得了一个JSON响应:
{
"userName": "Painkiller",
"email": "painkiller@gmail.com",
"enabled": true
}
因此,在我的 Laravel 应用程序中,我必须执行此调用,然后解析之前返回的 JSON 对象,以将经过身份验证的对象生成到前端应用程序会话中。
我认为上一个自定义用户提供r 是更整洁和最自然的解决方案,但我得到了一个错误,我会解释这种情况。
我已经实现了上一个教程的所有4 个步骤,并且我认为我已经用我的自定义用户提供程序正确替换了用户提供程序。
在这些实施步骤之后,我执行了这个命令:
php artisan make:auth
生成与 Laravel登录系统相关的视图和路由。我希望它使用自定义用户提供程序。
所以我有这些路线:
$ php artisan route:list
+--------+----------+------------------------+----------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------+----------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | App\Http\Controllers\LoginBetriviusController@index | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | POST | doLogin | | App\Http\Controllers\LoginBetriviusController@doLogin | web |
| | GET|HEAD | home | | App\Http\Controllers\HomeController@index | web,auth |
| | POST | login | | App\Http\Controllers\Auth\LoginController@login | web,guest |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web,guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | web |
| | POST | password/email | | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest |
| | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web,guest |
+--------+----------+------------------------+----------+------------------------------------------------------------------------+--------------+
如您所见,有标准的登录路线。我认为现在它必须使用我的自定义用户提供者(调用我的 REST Web 服务的那个)而不是标准的。
我使用语句运行应用程序:
php artisan serve
它开始时没有错误,然后我访问此 URL:
http://localhost:8000/login
并且登录页面正确显示。
然后我插入凭据(电子邮件和密码),但是当我提交登录表单时,我收到此错误消息:
ReflectionException in Container.php line 749:
Class App\Listeners\LogAuthenticationAttempt does not exist
in Container.php line 749
at ReflectionClass->__construct('App\Listeners\LogAuthenticationAttempt') in Container.php line 749
at Container->build('App\Listeners\LogAuthenticationAttempt', array()) in Container.php line 644
at Container->make('App\Listeners\LogAuthenticationAttempt', array()) in Application.php line 709
at Application->make('App\Listeners\LogAuthenticationAttempt') in Dispatcher.php line 373
at Dispatcher->createClassCallable('App\Listeners\LogAuthenticationAttempt', object(Application)) in Dispatcher.php line 354
at Dispatcher->Illuminate\Events\{closure}(object(Attempting))
at call_user_func_array(object(Closure), array(object(Attempting))) in Dispatcher.php line 221
at Dispatcher->fire(object(Attempting)) in SessionGuard.php line 401
at SessionGuard->fireAttemptEvent(array('email' => 'dsfsdf@sdfsdf.com', 'password' => 'fdsfsdfsdf'), true, true) in SessionGuard.php line 351
at SessionGuard->attempt(array('email' => 'dsfsdf@sdfsdf.com', 'password' => 'fdsfsdfsdf'), true) in AuthenticatesUsers.php line 77
at LoginController->attemptLogin(object(Request)) in AuthenticatesUsers.php line 42
at LoginController->login(object(Request))
at call_user_func_array(array(object(LoginController), 'login'), array(object(Request))) in Controller.php line 55
at Controller->callAction('login', array(object(Request))) in ControllerDispatcher.php line 44
at ControllerDispatcher->dispatch(object(Route), object(LoginController), 'login') in Route.php line 190
at Route->runController() in Route.php line 144
at Route->run(object(Request)) in Router.php line 653
at Router->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in RedirectIfAuthenticated.php line 24
at RedirectIfAuthenticated->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in SubstituteBindings.php line 41
at SubstituteBindings->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 65
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Router.php line 655
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 629
at Router->dispatchToRoute(object(Request)) in Router.php line 607
at Router->dispatch(object(Request)) in Kernel.php line 268
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Kernel.php line 150
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 117
at Kernel->handle(object(Request)) in index.php line 54
at require_once('C:\Users\Andrea\Documents\Betrivius\WorkSpace\betriviusExtranet\public\index.php') in server.php line 21
为什么?有什么问题?我该如何解决这个问题?
我不喜欢 Laravel,但正在搜索有关 Laravel 登录的在线信息以及丢失的LogAuthenticationAttempt类的问题,我找到了这个 SO 帖子:
也许这是一个类似的问题,但我不明白它可能是相同的情况以及如何解决它。
我能做些什么?