Yev*_*Yev 10 php authentication laravel laravel-3
我是laravel的新手,我在第一次申请时设置了管理面板授权.我目前设置文件的方式是:
controllers/
admin/
dashboard.php
settings.php
non-admin-controller1.php
non-admin-controller1.php
views/
admin/
dashboard.blade.php
login.blade.php
template.blade.php
non-admin-view1.php
non-admin-view1.php
non-admin-view1.php
Run Code Online (Sandbox Code Playgroud)
......这些是我的路线
Route::get('admin/login', function()
{
return View::make('admin.login');
});
Route::get('admin/logout', function()
{
return Auth::logout();
return Redirect::to('admin/login');
});
Route::post('admin/login', function()
{
$userdata = array('username' => Input::get('username'),
'password' => Input::get('password'));
if (Auth::attempt($userdata))
{
return Redirect::to('admin');
}
else
{
return Redirect::to('admin/login')->with('login_errors',true);
}
});
Route::controller('admin.dashboard');
Route::get('admin', array('before' => 'auth', function() {
return Redirect::to_action('admin@dashboard');
}));
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::to('admin/login');
});
Run Code Online (Sandbox Code Playgroud)
当我去/ admin时,我被重定向到admin/login并要求登录,这正是我需要它工作的方式.登录后,我被重定向到管理员/仪表板,这一切看起来都很好.然而,我有两个问题.
当我进入管理/注销时,我已经注销,但是用空白页面打招呼(它没有重定向到管理员/登录)
注销后,如果我转到管理员/仪表板,我会收到错误消息
渲染视图出错:[admin.dashboard]
试图获得非对象的属性
我在这做错了什么?我做得对吗?为管理员创建一个单独的包更合理吗?谢谢!
Yev*_*Yev 10
所以我能够以稍微不同的方式解决我的问题.我在controllers文件夹的根目录中创建了一个(基础)Admin_Controller,构造函数在执行之前调用了auth过滤器:
class Admin_Controller extends Base_Controller {
public function __construct()
{
$this->filter('before', 'auth');
}
}
Run Code Online (Sandbox Code Playgroud)
然后在/ controllers/admin中使我所有与管理员相关的控制器扩展Admin_Controller并调用父构造函数:
class Admin_Dashboard_Controller extends Admin_Controller {
public function __construct()
{
parent::__construct();
}
public function action_index()
{
return View::make('admin.dashboard');
}
}
Run Code Online (Sandbox Code Playgroud)
这可能不是最有说服力的解决方案,但它可以完成这项工作!
在您的admin/login路线中,您在Auth::logout()通话前有一个不必要的回报,核武器,它应该修复它.
这里的另一个问题是只有你的一个"管理员"路线被过滤掉了.您可以使用a包装所有管理路由Route::group()并在过滤之前应用'auth',也可以使用Route::filter('pattern: admin/*', 'auth').
查看:
http://laravel.com/docs/routing#filters
对于第二个问题,您的Admin Dashboard控制器类Admin_Dashboard_Controller是否已命名,如果是,那么在返回视图时是否有action_index()或get_index()函数?
查看:
http://laravel.com/docs/controllers#nested-controllers
(我假设你在这里使用L3顺便说一句.)
对于未来的读者来说,一个非常干净的方法是使用Laravel的路由组:
路由组允许您跨大量路由共享路由属性,例如中间件或命名空间,而无需在每条路由上定义这些属性.
Route::group(['middleware' => 'auth'], function () {
Route::get('/', function () {
// Uses Auth Middleware
});
Route::get('user/profile', function () {
// Uses Auth Middleware
});
});
Run Code Online (Sandbox Code Playgroud)
它们可不仅用于认证,而且Namespaces,Sub-Domains等.
| 归档时间: |
|
| 查看次数: |
21275 次 |
| 最近记录: |