17

我试图让 HybridAuth 社交登录在这个简单的 php 网站上工作。下载并安装了 HybridAuth。然后发现即使是示例也不适用于社交登录(也在远程服务器上尝试过。

正常的 signin_signup 示例工作正常。但是,每当我单击链接登录到社交网络(即 facebook、twitter)时,它都会将我重定向到 (MY_BASE_URL/index.php?hauth.start=Facebook&hauth.time),而根本不会显示任何登录窗口/错误消息。

我已经仔细阅读了此处发布的文档和其他解决方案。将我的 config.php 调整为具有类似http://example.com/index.php的基本网址。但它只是没有回应。有什么我想念的吗?我已经花了2天时间。

这是我的 config.php

return 
    array(
        "base_url" => "http://example.com/index.php", 

        "providers" => array ( 
            // openid providers
            "OpenID" => array (
                "enabled" => false
            ),

            "AOL"  => array ( 
                "enabled" => false 
            ),

            "Yahoo" => array ( 
                "enabled" => false,
                "keys"    => array ( "id" => "", "secret" => "" )
            ),

            "Google" => array ( 
                "enabled" => true,
                "keys"    => array ( "id" => "", "secret" => "" )
            ),

            "Facebook" => array ( 
                "enabled" => true,
                "keys"    => array ( "id" => "xxxxxxxxx", "secret" => "xxxxxxx" )
            ),

            "Twitter" => array ( 
                "enabled" => true,
                "keys"    => array ( "key" => "xxxxxxxx", "secret" => "xxxxxxxx" ) 
            ),

            // windows live
            "Live" => array ( 
                "enabled" => false,
                "keys"    => array ( "id" => "", "secret" => "" ) 
            ),

            "MySpace" => array ( 
                "enabled" => false,
                "keys"    => array ( "key" => "", "secret" => "" ) 
            ),

            "LinkedIn" => array ( 
                "enabled" => true,
                "keys"    => array ( "key" => "xxxxxxxx", "secret" => "xxxxxxx" ) 
            ),

            "Foursquare" => array (
                "enabled" => false,
                "keys"    => array ( "id" => "", "secret" => "" ) 
            ),
        ),

        // if you want to enable logging, set 'debug_mode' to true  then provide a writable file by the web server on "debug_file"
        "debug_mode" => false,

        "debug_file" => ""
    );

有人可以帮帮我吗?在网上搜索了很长时间后,我感觉它根本不起作用。如果是这样,有人可以指出更好的替代开源/免费社交登录库吗?

4

5 回答 5

23

除了 tintinboss 自己的回答,我发现我也需要检查hauth_done(这是一个测试 Facebook 的示例):

if (isset($_REQUEST['hauth_start']) || isset($_REQUEST['hauth_done']))
{
    Hybrid_Endpoint::process();
}

这终于让它工作了 - 谢谢你 tintinboss 的有用答案!

于 2013-08-29T21:07:50.347 回答
20

好的,我自己解决了。

如前所述,文档确实不好。这是将来想要集成此代码的任何人的解决方案

首先,您必须在 config.php 中使您的 baseurl 像这样

"base_url" => "http://yoursite.com/subdomain/index.php", OR

"base_url" => "http://yoursite.com/index.php",

请注意,我没有使用 www。不知道为什么,但它不适用于www。

现在是棘手的部分,您必须将其包含在您的 index.php 文件中

require_once( "PATH_TO_HYBRID/Auth.php" );
require_once( "PATH_TO_HYBRID/Endpoint.php" ); 

if (isset($_REQUEST['hauth_start']))
        {
            Hybrid_Endpoint::process();

        }

如果未提供端点进程,您将重定向到空白页面。根据我的测试,您必须将其添加到 index.php 中。

现在代码应该可以正常工作了:)如果它对某人有帮助,我会很高兴。

于 2013-03-18T18:09:52.623 回答
7

@tintinboss 和 @dJomp 的答案让我很满意。但是我仍然需要从登录用户那里获取信息,这确实花了我很长时间。在这里,我分享最终版本,它将让你远离这个可怕的循环。

$config = require 'config.php';
require_once( "Hybrid/Auth.php" );
require_once( "Hybrid/Endpoint.php" );

if (isset($_REQUEST['hauth_start']) || isset($_REQUEST['hauth_done'])) {
    Hybrid_Endpoint::process();
} else {
    try {
        $hybridauth = new Hybrid_Auth( $config );
        $google = $hybridauth->authenticate( "Google");
        $user_profile = $google->getUserProfile();

        echo "Hi there! " . $user_profile->email; 
    } catch( Exception $e ){
        echo "Ooophs, we got an error: " . $e->getMessage();
    }
}
于 2015-08-03T19:15:25.613 回答
1

嗨,我已经尝试了这个问题的所有解决方案建议,但没有一个达到解决方案。我解决了这样的问题。

"base_url" => 'http://'.$_SERVER['SERVER_NAME'].'inauth/auth',

这里的关键点是服务器名称。此外,cookie 正在记录您的会话,您无法预览所做的更改。清除 cookie 并重试。

于 2017-07-18T13:04:11.390 回答
0

我们正在使用 nginx,我们通过将?$args添加到我们的位置块来修复它。没有它,请求不会通过 hausth_done。

location / {
    try_files $uri $uri/ /index.php?$args;
}
于 2019-01-19T08:00:33.357 回答