身份验证问题 Laravel 5.2 登录仅在本地工作

Posted

技术标签:

【中文标题】身份验证问题 Laravel 5.2 登录仅在本地工作【英文标题】:authentication issue Laravel 5.2 login only working locally 【发布时间】:2017-01-21 00:00:54 【问题描述】:

我是 laravel 框架的新手,我正在尝试为我的单页个人网站实现我自己的小型 CMS。我正在使用 laravel 5.2 和由 php artisan make:auth 创建的标准身份验证。本地一切正常。当我尝试登录时,问题出现在实时环境(Ubuntu 服务器 16.04)上。我得到以下堆栈跟踪:

TokenMismatchException in VerifyCsrfToken.php line 67:
1.  in VerifyCsrfToken.php line 67
2.  at VerifyCsrfToken->handle(object(Request), object(Closure))
3.  at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
4.  at Pipeline->Illuminate\Pipeline\closure(object(Request))
5.  at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
6.  at Pipeline->Illuminate\Routing\closure(object(Request)) in ShareErrorsFromSession.php line 49
7.  at ShareErrorsFromSession->handle(object(Request), object(Closure))
8.  at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
9.  at Pipeline->Illuminate\Pipeline\closure(object(Request))
10. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
11. at Pipeline->Illuminate\Routing\closure(object(Request)) in StartSession.php line 62
12. at StartSession->handle(object(Request), object(Closure))
13. at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
14. at Pipeline->Illuminate\Pipeline\closure(object(Request))
15. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
16. at Pipeline->Illuminate\Routing\closure(object(Request)) in AddQueuedCookiesToResponse.php line 37
17. at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
18. at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
19. at Pipeline->Illuminate\Pipeline\closure(object(Request))
20. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
21. at Pipeline->Illuminate\Routing\closure(object(Request)) in EncryptCookies.php line 59
22. at EncryptCookies->handle(object(Request), object(Closure))
23. at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
24. at Pipeline->Illuminate\Pipeline\closure(object(Request))
25. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
26. at Pipeline->Illuminate\Routing\closure(object(Request))
27. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
28. at Pipeline->then(object(Closure)) in Router.php line 726
29. at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
30. at Router->dispatchToRoute(object(Request)) in Router.php line 675
31. at Router->dispatch(object(Request)) in Kernel.php line 246
32. at Kernel->Illuminate\Foundation\Http\closure(object(Request))
33. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
34. at Pipeline->Illuminate\Routing\closure(object(Request)) in CheckForMaintenanceMode.php line 44
35. at CheckForMaintenanceMode->handle(object(Request), object(Closure))
36. at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
37. at Pipeline->Illuminate\Pipeline\closure(object(Request))
38. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
39. at Pipeline->Illuminate\Routing\closure(object(Request))
40. at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
41. at Pipeline->then(object(Closure)) in Kernel.php line 132
42. at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
43. at Kernel->handle(object(Request)) in index.php line 54

ErrorException in Filesystem.php line 109:file_put_contents(/8c52f42d0453d6f2bbd07ea1aa65b77b90238995): failed to open stream: Permission denied
1.  in Filesystem.php line 109
2.  at HandleExceptions->handleError('2', 'file_put_contents(/8c52f42d0453d6f2bbd07ea1aa65b77b90238995): failed to open stream: Permission denied', '/var/www/laravel/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php', '109', array('path' => '/8c52f42d0453d6f2bbd07ea1aa65b77b90238995', 'contents' => 'a:3:s:6:"_token";s:40:"Z5yxi65ubXWtVrZiMeU2yAGdJjxQs4xxNY7xU5Tx";s:9:"_sf2_meta";a:3:s:1:"u";i:1473341363;s:1:"c";i:1473341363;s:1:"l";s:1:"0";s:5:"flash";a:2:s:3:"old";a:0:s:3:"new";a:0:', 'lock' => true))
3.  at file_put_contents('/8c52f42d0453d6f2bbd07ea1aa65b77b90238995', 'a:3:s:6:"_token";s:40:"Z5yxi65ubXWtVrZiMeU2yAGdJjxQs4xxNY7xU5Tx";s:9:"_sf2_meta";a:3:s:1:"u";i:1473341363;s:1:"c";i:1473341363;s:1:"l";s:1:"0";s:5:"flash";a:2:s:3:"old";a:0:s:3:"new";a:0:', '2') in Filesystem.php line 109
4.  at Filesystem->put('/8c52f42d0453d6f2bbd07ea1aa65b77b90238995', 'a:3:s:6:"_token";s:40:"Z5yxi65ubXWtVrZiMeU2yAGdJjxQs4xxNY7xU5Tx";s:9:"_sf2_meta";a:3:s:1:"u";i:1473341363;s:1:"c";i:1473341363;s:1:"l";s:1:"0";s:5:"flash";a:2:s:3:"old";a:0:s:3:"new";a:0:', true) inFileSessionHandler.php line 71
5.  at FileSessionHandler->write('8c52f42d0453d6f2bbd07ea1aa65b77b90238995', 'a:3:s:6:"_token";s:40:"Z5yxi65ubXWtVrZiMeU2yAGdJjxQs4xxNY7xU5Tx";s:9:"_sf2_meta";a:3:s:1:"u";i:1473341363;s:1:"c";i:1473341363;s:1:"l";s:1:"0";s:5:"flash";a:2:s:3:"old";a:0:s:3:"new";a:0:') in Store.php line 262
6.  at Store->save() in StartSession.php line 88
7.  at StartSession->terminate(object(Request), object(Response)) in Kernel.php line 155
8.  at Kernel->terminate(object(Request), object(Response)) in index.php line 58

这是我的路线

Route::get('/', 'FrontendController@index');

       Route::group(['middleware' => 'web'], function () 
            Route::auth();
            Route::get('/admin', 'AdminController@index');
            Route::get('/profile', 'AdminController@editProfile');
            Route::put('/profile/update', 'AdminController@updateProfile');
            Route::get('/page', 'PageController@index');
            Route::put('/page/update', 'PageController@update');
            Route::resource('aboutItems', 'AboutItemsController');
            Route::resource('portfolioItems', 'PortfolioItemsController');
    );

登录表单:

 <div class="login login-v2" data-pageload-addclass="animated fadeIn">
            <div class="login-content">
                <form class="form-horizontal" role="form" method="POST" action=" url('/login') ">
                    !! csrf_field() !!

                    <div class="form-group $errors->has('email') ? ' has-error' : '' ">
                        <label class="col-md-4 control-label">E-Mail Address</label>

                        <div class="col-md-6">
                            <input type="email" class="form-control" name="email" value=" old('email') ">

                            @if ($errors->has('email'))
                                <span class="help-block">
                                        <strong> $errors->first('email') </strong>
                                    </span>
                            @endif
                        </div>
                    </div>

                    <div class="form-group $errors->has('password') ? ' has-error' : '' ">
                        <label class="col-md-4 control-label">Password</label>

                        <div class="col-md-6">
                            <input type="password" class="form-control" name="password">

                            @if ($errors->has('password'))
                                <span class="help-block">
                                        <strong> $errors->first('password') </strong>
                                    </span>
                            @endif
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="col-md-6 col-md-offset-4">
                            <button type="submit" class="btn btn-primary">
                                <i class="fa fa-btn"></i>Login
                            </button>
                        </div>
                    </div>
                </form>

我做过/尝试过和调查过的事情:

存储和引导/缓存中的目录是可写的 并设置为 www-data 使用 php artisan key 生成了一个新密钥:generate 通过添加 !! 确保登录表单正在发送 csrf 令牌Csrf_field() !! 有一次我什至尝试将整个项目的权限设置为 777,但没有结果 测试会话是否设置正确 试图将会话配置更改为 cookie 而不是文件 清除缓存、composer dump-autoload、删除所有 cookie 数据库已播种

【问题讨论】:

你确定生成了csrf字段吗?使用 chrome f11 检查元素。应该有一个隐藏字段。 是的。正在生成该字段。 【参考方案1】:

我在下面的视图文件中使用 csrf 字段来形成标签。

<input type="hidden" name="_token" value=" csrf_token() " />

试试这个,希望这会有所帮助。

【讨论】:

就像我说的,crsf 字段正在正确生成。不幸的是,将其更改为您的示例并不能解决问题。 您的表单是否包含输入字段?如果是,您应该像我在这里写的那样使用令牌,尝试一次。 抱歉,我的回答不清楚。我确实试过你的方法。它没有用。【参考方案2】:

我将我的项目升级到 5.3,现在我的 VPS 上似乎一切正常。我仍然不知道实际的问题是什么。安装 Laravel 或身份验证时可能出现问题。

【讨论】:

以上是关于身份验证问题 Laravel 5.2 登录仅在本地工作的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 默认使用 Vuejs 进行身份验证,仅在登录后提供 spa

仅在 Laravel 中公开某些身份验证路由

如何在 Laravel 5.2 中创建多重身份验证

如何更改 Laravel 5.2 更改登录路由?

身份验证控制器中的 Laravel 5.2 Web 中间件导致 csrf 令牌不匹配

在AuthController中覆盖laravel的5.2身份验证方法