2

我正在进行此编辑以澄清事情,如果您需要更多信息,请阅读编辑下方的内容。

基本上我已经将我的 laravel cms 部署到站点上的子目录中,因此通常的 laravel 'public' 文件夹现在是 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_html)时,登录后端可以完美运行。

但是对于最近的一个项目,我不得不使用一个子文件夹“/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');
});

我知道它在控制器中传递了“if”语句,因为如果我将过滤器更改为 Redirect::to(' http://google.com '); 它重定向到谷歌。这意味着登录有效,然后传递到 /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