2

由于我从 symfony 2.0 更新到 2.1,我无法通过 Facebook 登录。Symfony 将我重定向到我的登录页面并显示此错误:

注意:vendor\doctrine\dbal\lib\Doctrine\DBAL\Statement.php 第 103 行中的数组到字符串转换

您可以在下面看到我的日志文件:

[2012-11-19 09:17:48] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest". [] []
[2012-11-19 09:17:48] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest". [] []
[2012-11-19 09:17:48] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". [] []
[2012-11-19 09:17:49] request.INFO: Matched route "fos_facebook_security_check" (parameters: "_controller": "Strict\UserBundle\Controller\LoginController::loginFbAction", "_locale": "pl", "_route": "fos_facebook_security_check") [] []
[2012-11-19 09:17:49] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". [] []
[2012-11-19 09:17:49] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". [] []
[2012-11-19 09:17:49] doctrine.DEBUG: SELECT t0.username AS username1, t0.username_canonical AS username_canonical2, t0.email AS email3, t0.email_canonical AS email_canonical4, t0.enabled AS enabled5, t0.salt AS salt6, t0.password AS password7, t0.last_login AS last_login8, t0.locked AS locked9, t0.expired AS expired10, t0.expires_at AS expires_at11, t0.confirmation_token AS confirmation_token12, t0.password_requested_at AS password_requested_at13, t0.roles AS roles14, t0.credentials_expired AS credentials_expired15, t0.credentials_expire_at AS credentials_expire_at16, t0.id AS id17, t0.facebookId AS facebookId18, t0.name AS name19, t0.text AS text20, t0.location AS location21, t0.picturePath AS picturePath22, t0.www AS www23, t0.language AS language24, t0.facebookWww AS facebookWww25, t0.male AS male26, t0.reviewsCount AS reviewsCount27, t0.postsCount AS postsCount28, t0.emailEnabled AS emailEnabled29, t0.messagesEnabled AS messagesEnabled30, t0.wwwNofollow AS wwwNofollow31, t0.facebookWwwNofollow AS facebookWwwNofollow32, t0.yearBirth AS yearBirth33, t0.lastModified AS lastModified34, t0.picture_id AS picture_id35 FROM fos_user t0 WHERE t0.facebookId = ? LIMIT 1 ["000_facebook_id_here_0000"] []
[2012-11-19 09:17:51] doctrine.DEBUG: SELECT t0.username AS username1, t0.username_canonical AS username_canonical2, t0.email AS email3, t0.email_canonical AS email_canonical4, t0.enabled AS enabled5, t0.salt AS salt6, t0.password AS password7, t0.last_login AS last_login8, t0.locked AS locked9, t0.expired AS expired10, t0.expires_at AS expires_at11, t0.confirmation_token AS confirmation_token12, t0.password_requested_at AS password_requested_at13, t0.roles AS roles14, t0.credentials_expired AS credentials_expired15, t0.credentials_expire_at AS credentials_expire_at16, t0.id AS id17, t0.facebookId AS facebookId18, t0.name AS name19, t0.text AS text20, t0.location AS location21, t0.picturePath AS picturePath22, t0.www AS www23, t0.language AS language24, t0.facebookWww AS facebookWww25, t0.male AS male26, t0.reviewsCount AS reviewsCount27, t0.postsCount AS postsCount28, t0.emailEnabled AS emailEnabled29, t0.messagesEnabled AS messagesEnabled30, t0.wwwNofollow AS wwwNofollow31, t0.facebookWwwNofollow AS facebookWwwNofollow32, t0.yearBirth AS yearBirth33, t0.lastModified AS lastModified34, t0.picture_id AS picture_id35 FROM fos_user t0 WHERE t0.email = ? LIMIT 1 ["my_email_address_here"] []
[2012-11-19 09:17:52] doctrine.DEBUG: "START TRANSACTION" [] []
[2012-11-19 09:17:52] doctrine.DEBUG: "ROLLBACK" [] []
[2012-11-19 09:17:52] security.INFO: Authentication request failed: Notice: Array to string conversion in vendor\doctrine\dbal\lib\Doctrine\DBAL\Statement.php line 103 [] []
[2012-11-19 09:17:52] security.DEBUG: Redirecting to fos_user_security_login [] []

上面的两个 sql SELECT 查询不会导致任何错误并且不返回任何结果(在 phpmyadmin 中检查)。

作曲家.json:

"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.2.*",
    "doctrine/orm": ">=2.2.3,<2.4-dev",
    "doctrine/doctrine-bundle": "1.0.*",
    "twig/extensions": "1.0.*",
    "symfony/assetic-bundle": "2.1.*",
    "symfony/swiftmailer-bundle": "2.1.*",
    "symfony/monolog-bundle": "2.1.*",
    "sensio/distribution-bundle": "2.2.*",
    "sensio/framework-extra-bundle": "2.2.*",
    "sensio/generator-bundle": "2.2.*",
    "jms/security-extra-bundle": "1.3.*",
    "jms/di-extra-bundle": "1.2.*",
    "facebook/php-sdk": "dev-master",
    "friendsofsymfony/user-bundle": "*",
    "friendsofsymfony/facebook-bundle": "dev-master",        
    "besimple/i18n-routing-bundle": "dev-master",
    "gregwar/captcha-bundle": "dev-master"
},

老实说,我不知道什么是错误的以及如何找到错误。如果您需要一些额外的数据/配置文件,请发表评论。

4

1 回答 1

1

嗨,我找到了解决方案。问题是 Facebook 不会返回picture要传递给实体setFBData的字符串属性。User

picture一个包含图像 url 的字符串属性。现在它包含:

细绳; 如果您的应用启用了“October 2012 Breaking Changes”迁移设置,则此字段将是具有 url 和 is_silhouette 字段的对象;如果用户尚未上传个人资料图片,is_silhouette 为真

我的 setFBdata 如下所示:

public function setFBData($fbdata)
{
    ...
    if (isset($fbdata['picture']))
    {
        $this->setPicturePath($fbdata['picture']);
    }

}

如您所见,它试图将对象/数组设置为字符串字段。

于 2012-11-20T11:49:01.577 回答