我已经创建了身份验证,并且它工作得很好。但是检查内页有一些问题。例如,
Route::get('/', array('before' => 'auth' , 'do'=> function(){
return View::make('home.index');
}));
索引页面仅对登录用户可见。但是每当我进入内页时,例如example.com/products
。无需登录即可查看产品页面。
我已经创建了身份验证,并且它工作得很好。但是检查内页有一些问题。例如,
Route::get('/', array('before' => 'auth' , 'do'=> function(){
return View::make('home.index');
}));
索引页面仅对登录用户可见。但是每当我进入内页时,例如example.com/products
。无需登录即可查看产品页面。
这是我的解决方案。
/**
* Groups of routes that needs authentication to access.
*/
Route::group(array('before' => 'auth'), function()
{
Route::get('user/logout', array(
'uses' => 'UserController@doLogout',
));
Route::get('/', function() {
return Redirect::to('dashboard');
});
Route::get('dashboard', array(
'uses' => 'DashboardController@showIndex',
));
// More Routes
});
// Here Routes that don't need Auth.
有几种方法可以为许多路由应用过滤器。
将 rotues 放入Route::group()
或者如果您使用控制器在其中添加过滤器,请将其添加到其中,Base_Controller
以便将其应用于所有人。您还可以使用过滤器模式并使用正则表达式,它将过滤器应用于除您不想要的少数之外的所有人。
文档
路由过滤器:http: //laravel.com/docs/routing#route-filters
模式过滤器的示例,因为其他基本在文档中。这可能是最快的,但也是最成问题的,因为在此函数中注册正则表达式的方式存在问题(*
实际上已转换为(.*)
)。
Route::filter('pattern: ^(?!login)*', 'auth');
这将 auth 应用于除example.com/login
.
Route::group(['middleware' => ['auth']], function()
{
Route::get('list', 'EventsController@index');
});
在文档页面上阅读更多信息: https ://laravel.com/docs/5.2/routing#route-groups
可能有更好的方法,但我采用白名单方法。除了我放在这个数组中的页面之外,所有内容都被禁止公开。
// config/application.php
return array(
'safe' => array(
'/',
'card/form_confirm',
'record/form_create',
'card/form_viewer',
'user/login',
'user/quick_login',
'user/register',
'info/how_it_works',
'info/pricing',
'info/faq',
'info/our_story',
'invite/accept',
'user/terms',
'user/privacy',
'email/send_email_queue',
'user/manual_login',
'checkin/',
'checkin/activate',
'system/list',
),
// routes.php
Route::filter('before', function()
{
// Maintenance mode
if(0) return Response::error( '503' );
/*
Secures parts of the application
from public viewing.
*/
$location = URI::segment(1) . '/' . URI::segment(2);
if(Auth::guest() && !in_array( $location, Config::get('application.safe')))
return Redirect::to( 'user/login' );
});
这段代码对我很好
Auth::routes();
Route::group(['middleware' => 'auth'], function () {
// Authentication Routes...
Route::get('/', 'HomeController@index')->name('home');
});
只需检查用户是否在您的视图中登录。或限制所有控制器(如果您使用它)或检查路由组,并为整个路由组提供过滤器:http: //laravel.com/docs/routing#groups
Route::filter('pattern: /*', array('name' => 'auth', function()
{
return View::make('home.index');
}));
使用 BaseController 扩展所有 Controller 必须登录的用户可以解决相同的问题。
例子:
class SomeController extends BaseController
{
public function index() { return view('some.index');}
}
__construct()
只需向 BaseController添加一个方法
class BaseController extends Controller
{
protected $redirectTo = '/myIndex'; // Redirect after successfull login
public function __construct()
{
$this->middleware('auth'); // force all controllers extending this to pass auth
}
}
更多信息在这里
它对我有用。看看它。
Route::when('*', 'auth.basic');
Route::get('api/getactorinfo/{actorname}', array('uses' =>'ActorController@getActorInfo'));
Route::get('api/getmovieinfo/{moviename}', array('uses' =>'MovieController@getMovieInfo'));
Route::put('api/addactor/{actorname}', array('uses' =>'ActorController@putActor'));
Route::put('api/addmovie/{moviename}/{movieyear}', array('uses' =>'MovieController@putMovie'));
Route::delete('api/deleteactor/{id}', array('uses' =>'ActorController@deleteActor'));
Route::delete('api/deletemovie/{id}', array('uses' =>'MovieController@deleteMovie'));