0

codeigniter アプリケーションで facebook-php-sdk を使用しています。URL から index.php を取り除こうとしているときに、認証に問題があります。

私の Facebook Connect の実装はシンプルで、問題なく動作します。(sdk コア ファイルはライブラリであり、アプリ データを含む cofig ファイルです) 次のように入力すると、認証がうまく機能します。

myapp.com/index.php/welcome

しかし、私がしようとしているとき:

myapp.com/welcome

ログインをクリックしてクリックしてクリックすると、ページが更新されます。

私のウェルカムコントローラー:

public function __construct()
{
    parent::__construct();
    // Your own constructor code
    $CI = & get_instance();
    $CI->config->load("facebook",TRUE);
    $config = $CI->config->item('facebook');
    $this->load->library('facebook', $config);
}

public function index()
{
    echo CI_VERSION;
    $user = $this->facebook->getUser();
    if($user) {
            $user_info = $this->facebook->api('/me');
            echo '<pre>'.htmlspecialchars(print_r($user_info, true)).'</pre>';
    } else {
        echo "<a href=\"{$this->facebook->getLoginUrl()}\">Login using Facebook</a>";
    }
}

それは簡単です。認証されると、私のfbアカウントデータが印刷されるだけです。

私の .htaccess:

RewriteCond %{THE_REQUEST} ^GET\ /index\.php/?([^ ]*)
RewriteRule ^index\.php/?(.*) /$1 [R,L]
RewriteCond $0 !^index\.php($|/)
RewriteRule .* index.php/$0 [L]

アップデート

mysite.com/welcome からのログイン URL が機能しない

https://www.facebook.com/dialog/oauth?client_id=487********73&redirect_uri=http%3A%2F%2Fmysite.com%2Fwelcome&state=ae51191b8eabf884ead0c116e7e28b4d

および mysite.com/index.php/welcome からWORKING FINE

https://www.facebook.com/dialog/oauth?client_id=487********73&redirect_uri=http%3A%2F%2Fmysite.com%2Findex.php%2Fwelcome&state=ae51191b8eabf884ead0c116e7e28b4d
4

1 に答える 1

2

別の .htaccess を使用してみてください。FBを使用したいくつかのCIプロジェクトでこれを問題なく使用しました:

<IfModule mod_rewrite.c>

    RewriteEngine On

    ### Canonicalize codeigniter URLs

    # If your default controller is something other than
    # "welcome" you should probably change this
    RewriteRule ^(welcome(/index)?|index(\.php)?)/?$ / [L,R=301]
    RewriteRule ^(.*)/index/?$ $1 [L,R=301]

    # Removes trailing slashes (prevents SEO duplicate content issues)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ $1 [L,R=301]

    # Removes access to the system folder by users.
    # Additionally this will allow you to create a System.php controller,
    # previously this would not have been possible.
    # 'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php/$1 [L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

<IfModule !mod_rewrite.c>

    # Without mod_rewrite, route 404's to the front controller
    ErrorDocument 404 /index.php

</IfModule>

そして、froddd の言うことを考慮してください。デフォルトのコントローラーは歓迎されます。代わりに www.yoursite.com または www.yoursite.com/welcome を使用できます。

于 2012-10-01T22:28:12.587 に答える