从外部脚本检查 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 调用 HTTPS 请求到外部 API

登录laravel 5.7后重定向到上一页

419 页面在 laravel 5.7 中过期

仅当用户在 Laravel 5.7 中处于活动状态时才登录用户

Laravel 为外部用户登录成功设置会话或令牌 - 无用户仅数据库 Api 用户

使用 Laravel 检查内部数据库中的 CAS 用户