17

この単純な php サイトで HybridAuth ソーシャル ログインを機能させようとしていました。HybridAuth をダウンロードしてインストールしました。次に、例でさえソーシャルログインでは機能しないことがわかりました(リモートサーバーでも試しました.

通常の signin_signup の例は問題なく動作します。しかし、ソーシャル ネットワーク (Facebook、Twitter など) にログインするためのリンクをクリックすると、ログイン ウィンドウやエラー メッセージがまったく表示されずに (MY_BASE_URL/index.php?hauth.start=Facebook&hauth.time) にリダイレクトされます。

ここに投稿されたドキュメントとその他のソリューションを注意深く読みました。http://example.com/index.phpのようなベース URL を持つように config.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

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 に答える
0

nginx を使用しており、ロケーション ブロックに?$argsを追加して修正しました。これがないと、リクエストは hauth_done を通過しません。

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