首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP 3:会话已经从杂交3开始了

CakePHP 3:会话已经从杂交3开始了
EN

Stack Overflow用户
提问于 2018-05-07 16:18:17
回答 1查看 1.2K关注 0票数 1

我有一个LoginController,在那里我做我通常的登录操作与电子邮件地址和密码相关联的帐户。

我已经将我的杂交相关代码分离到一个名为OauthController的单独控制器中,在这里我有我所有的杂交魔法,以及我的callback / endpoint居住的地方。

OauthController中,我检查用户来自指定提供者的电子邮件是否已经注册,在任何一种情况下,我都尝试使用$this->Auth->setUser(object)登录该用户。

每当调用$this->Auth或其他任何内容时,我都会得到一个响应,声明:

代码语言:javascript
复制
Session was already started

我通过CakePHP 3代码进行浏览器,并在下面的语句中找到了以下语句:

vendor/cakephp/cakephp/src/Network/Session.php (335)

代码语言:javascript
复制
public function start()
{
    if ($this->_started) {
        return true;
    }

    if ($this->_isCLI) {
        $_SESSION = [];
        $this->id('cli');

        return $this->_started = true;
    }

    if (session_status() === \PHP_SESSION_ACTIVE) {
        throw new RuntimeException('Session was already started');
    }

    ...

这就是代码中那个信息被扔给我的地方。

现在,当我浏览杂交代码本身时,我发现如下:

vendor/hybridauth/hybridauth/src/Storage/Session.php (46)

代码语言:javascript
复制
public function __construct()
{
    if (session_id()) {
        return;
    }

    if (headers_sent()) {
        throw new RuntimeException('HTTP headers already sent to browser and Hybridauth won\'t be able to start/resume PHP session. To resolve this, session_start() must be called before outputing any data.');
    }

    if (! session_start()) {
        throw new RuntimeException('PHP session failed to start.');
    }
}

虽然CakePHP的部分阻止了我的工作,但他们都先打电话给session_start

我试着从杂交中删除!session_start()检查,但是杂交不知道在哪里读出它需要阅读的内容。

因此,作为一个演示者,我正试图在OauthController中实现这一点。

代码语言:javascript
复制
<?php

namespace App\Controller;

use Hybridauth\Hybridauth;

class OauthController extends AppController
{

    public function callback($provider)
    {
        try {
            $hybridauth = new Hybridauth($config);

            // additional mystery code

            $hybridauth->authenticate();

            if($everything_okay) {
                $this->Auth->setUser($userObject); // and this is the point of failure
                return $this->redirect('/account'); // and this never happends... :(
            }
        }
    }

}

任何关于如何处理这个问题的帮助、想法和见解都是受欢迎的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-07 18:19:44

只需在使用CakePHP库之前手动启动Hybridauth会话,这样它就可以在session_id()检查时退出,并获取现有会话。

例如,在控制器中:

代码语言:javascript
复制
$this->getRequest()->getSession()->start();

// in CakePHP versions before 3.6/3.5
// $this->request->session()->start();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50218515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档