2012-01-11 9 views
1

質問をする前に状況を教えてください。私はサイトdomain.comを持っています。ページsub.domain.comにアクセスするには、ユーザーがログインする必要があります。 domain.com/loginというアクションを持つフォームを提供するsub.domain.com/loginへのアクセスを許可すると、domain.com/loginにデータが送信され、sub.domain.com/loginにリダイレクトされます。しかし、認証が必要なsub.domain.comにアクセスしようとすると、domain.com/loginに正しくリダイレ​​クトされますが、ログイン後にsub.domain.comにリダイレクトされません。エラーが見つかりましたログインしていないときのリダイレクトは参照元ヘッダーを送信していませんでした。ユーザーが認証を必要とするサブドメインのページにアクセスしようとすると、domain.com/loginにリダイレクトされ、元の場所に戻るようにする方法はありますか?cakephp authリダイレクトと参照者

答えて

0

[OK]を、それはすべてのルートとしなければなりませんでした。戻ってどこにリダイレクトすることになっています

preg_match('/^(?:www\.)?(?:(.+)\.)?(.+\..+)$/i', env('HTTP_HOST'), $matches); 
$subdomain = empty($matches[1]) ? false : $matches[1]; 
if(strlen($subdomain) > 0 && $subdomain != "www") 
{ 
    if($subdomain == 'api') 
     $_GET["url"] = $subdomain . "/" . (isset($_GET["url"]) ? $_GET["url"] : ""); 
    Configure::write('subdomain', $subdomain); 
} 
0

リダイレクトは常にsub.domain.comにリダイレクトする必要がありますか?もしそうなら、AuthComponentsのloginRedirect属性を、ユーザーにリダイレクトされる場所に設定することをお勧めします。 http://book.cakephp.org/1.3/en/view/1270/loginRedirect

また、CakePHPは、ログインの前にアクセスしていたコントローラ - アクションのペアをセッションに自動的に保存しています。したがって、あなたのセッションがdomain.comとsub.domain.comの間で共有されているかどうかを確認する必要があります。

最後に1つのコメント:ログイン後にになるのですか? domain.comのコントローラ/アクションにリダイレクトされていますか、まったくリダイレ​​クトされていませんか?

注:私はあなたがCakePHPの1.3を使用していると仮定してのユーザーを記録するためのAuthコンポーネントを使用しています

+0

switch(Configure::read('subdomain')) { case 'subdomain': Router::connect('/login', array('controller'=>'users', 'action'=>'login')); } 

ですからように私のブートストラップを設定します。私は最終的にそれは私のroutes.phpのファイルにswitch文を設定して動作させることができましたあなたはそうでしたが、ログインページに再度リダイレクトされます。私のセッションは2人で共有されています。ログインすると、手動でsub.domain.comに再度アクセスしてアクセスできます。私はCakephp 1.3とAuthComponentを使用しています – LordZardeck

+0

実際にあなたを再度ログインページにリダイレクトするのですか、それともサブドメインにリダイレクトしてログインページにリダイレクトしますか? (これはおそらくあなたが気づかないほど速くなるでしょう) httpfox(firefox-extension)を使用すると、送信されているすべてのヘッダーが表示されます。 – Joep

+0

は「/」にリダイレクトされます。見つかった、それはサブドメインと関係がある。 sub.domain.comはcakephpの '/'です。ケーキはdomain.comとsub.domain.comを区別しません – LordZardeck

関連する問題