从外部脚本检查 Laravel 5.7 登录
Posted
技术标签:
【中文标题】从外部脚本检查 Laravel 5.7 登录【英文标题】:Check Laravel 5.7 login from external script 【发布时间】:2019-02-23 08:27:31 【问题描述】:我有一个 Laravel 应用程序,我需要检查用户是否已登录以及来自外部脚本的用户。我正在使用以下几行来加载 Laravel 并尝试检查它。
require_once __DIR__.'/../../../vendor/autoload.php';
$app = require_once __DIR__.'/../../../bootstrap/app.php';
$app->make('Illuminate\Contracts\Http\Kernel')
->handle(Illuminate\Http\Request::capture());
/*if (Cookie::get(config('session.cookie')) != "")
$id = Cookie::get(config('session.cookie'));
Session::driver()->setId($pericod);
Session::driver()->start();
*/
$isAuthorized = Auth::check();
if(!$isAuthorized)
echo "NO AUTORIZADO";
exit();
通过这一行,我可以访问任何 Laravel 函数,如果我向外部脚本发出 GET
请求,我可以检查登录,但是当请求是 POST
时,它总是失败。我无法检查登录,并且我看到会话发生更改,因为无法获取现有会话。
我做了很多测试,我认为 Laravel 的某些东西不能正常工作,比如路由或中间件。如果我禁用 cookie 和会话的所有加密,我可以让它工作,但我想使用这个安全功能。
我正在使用更新的 Laravel 5.7,并且这段代码在 Laravel 5.4 中运行
感谢您的帮助。
【问题讨论】:
【参考方案1】:我发现了问题,
诀窍在于路由在 laravel 外部,因此 laravel 的路由解析器将当前路由标识为 /。
它正在处理GET
请求,因为在我的路由文件中,我只有 / 路由作为获取。如果我将 / 路由设置为 any,一切正常。
我没有看到问题,因为我没有终止 Laravel 的执行。如果我将登录的用户验证更改为此,则会显示错误:
$isAuthorized = Auth::check();
if(!$isAuthorized)
echo "NO AUTORIZADO";
$response->send();
$kernel->terminate($request, $response);
exit();
这两行结束 laravel 执行并返回错误“405 Method Not Allowed”。
$response->send();
$kernel->terminate($request, $response);
感谢您的帮助。
【讨论】:
以上是关于从外部脚本检查 Laravel 5.7 登录的主要内容,如果未能解决你的问题,请参考以下文章
仅当用户在 Laravel 5.7 中处于活动状态时才登录用户