2

物事を明確にするためにこの編集を行っています。詳細情報が必要な場合は、編集の下の内容をお読みください。

基本的に、laravel cms をサイトのサブディレクトリにデプロイして、通常の laravel の「パブリック」フォルダーが example.com/blog になるようにしました

ルート、つまりexample.comにデプロイするとアプリは正常に動作しますが、サブディレクトリ/サブフォルダーにデプロイすると機能しません(以下のパスなどを参照)。ブログ記事はメインの /blog インデックス ページに問題なく表示されているため、パスの問題ではないようです (ただし、間違っている可能性があります)。

問題:認証が失敗しているため、cms のバックエンドにログインできません。

ログインコントローラーに変更を加えて、これをテストしました。

public function user()
{
            $username = Input::get('username');
            $password = Input::get('password');

    if(Auth::attempt(array('username' => $username, 'password' => $password)))
    {
        // we are now logged in go here
        return Redirect::to('test');
    }
    else
    {
        return Redirect::to('wrongdetails');
    }
}

そして私のルート:

Route::get('test', function()
{
    if (Auth::check())
    {
        return 'the user is logged in';
    }else
    {
        return 'the user is not logged in';
    }
});

Route::get('wrongdetails', function()
{
    return 'wrong password';
});

結果: ログインフォームに正しい詳細を送信すると、/test に誘導され、ユーザーがログインしていないことが通知され、間違った詳細を送信すると、間違った詳細ページに移動します。何か案は?



カスタム cms を作成しました。バックエンドへのログインは、'public' フォルダがドメインのルート、つまり共有ホストの public_html にある場合に完全に機能します。

しかし、最近のプロジェクトでは、ルートの「public」フォルダーとしてサブフォルダー「/blog」を使用する必要があり、適切に認証されていません。

余談ですが、アプリケーションは次のように機能します。

www.example.com/blog/secure/login でログインすると、example.com/blog/cms のバックエンドに移動します

example.com/blog/cms は、認証されている場合にのみアクセスできます。認証されていない場合は、filter.php 経由でログイン ページにリダイレクトされます。

私の route.php の関連部分は次のようになります。

Route::group(array('before' => 'auth'), function()
{
    Route::resource('cms', 'PostsController');
});

Route::get('secure/login', function()
{
    return View::make('secure/loginForm');
});

Route::post('secure/login', 'UserLogin@user');

私の loginForm ビューは、関連して次のようになります。

<?php echo Form::open(array('url' => '/secure/login', 'class' => 'box login')); ?>
<fieldset class="boxBody">
 <label>Username</label>
 <input type="text" tabindex="1" name="username" required>
 <label>Password</label>
 <input type="password" name="password" tabindex="2" required>
 <input type="submit" class="btnLogin" value="Login" tabindex="4">
</fieldset>
</form>

最後に、コントローラーは次のようになります。

public function user()
{
    // get POST data
    $userdata = array(
        'username' => Input::get('username'),
        'password' => Input::get('password')
    );

    if(Auth::attempt($userdata))
    {
        // we are now logged in, go to admin
        return Redirect::to('/cms');
    }
    else
    {
        return Redirect::to('secure/login');
    }
}

コントローラーのifステートメントを渡して/ cmsに移動するという意味で機能しますが、/ cmsに到達すると、認証済みとして表示されないため、ログインページにリダイレクトされます。

認証が引き継がれない理由を誰でも見ることができますか? 前述したように、パブリック フォルダーがドメインのルートであり、サブフォルダーにない場合に機能します。

これが役立つ場合があります。filters.php の関連部分は次のようになります。

Route::filter('auth', function()
{
    if (Auth::guest()) 
    return Redirect::to('secure/login');
});

フィルターを Redirect::to(' http://google.com ');に変更すると、コントローラーで「if」ステートメントを渡していることがわかります。Google にリダイレクトされます。ログインが機能してから /cms に渡されることを意味しますが、/cms ディレクトリは認証されていないものとして私をピックアップし、それが理にかなっている場合は Google.com に送信します。

cms がサブドメインを指すようにパスが変更されました。bootstrap/paths.php の関連部分は次のとおりです。

'app' => __DIR__.'/../../mycms/app',
'public' => __DIR__,
'base' => __DIR__.'/../../mycms',
'storage' => __DIR__.'/../../mycms/app/storage',

また、/blog サブディレクトリにある index.php:

require __DIR__.'/../../mycms/bootstrap/autoload.php';
$app = require_once __DIR__.'/../../mycms/bootstrap/start.php';

これは絶対に頭を悩ませています、ハ。

4

0 に答える 0