我正在进行此编辑以澄清事情,如果您需要更多信息,请阅读编辑下方的内容。
基本上我已经将我的 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';
这绝对让我大吃一惊,哈。