我正在使用laravel 5.7。请查看我的代码:
web.php
Route::prefix('admin')->group(function () {
Route::get('/', function () {
return redirect()->route('admin.check');
});
Route::get('/check-auth', 'Admin\AdminController@checkAuth')->name('admin.check');
});
AdminController::checkAuth()
public function checkAuth()
{
if(true == Auth::guard('admin')->user()){
return redirect()->route('cs.dashboard');
} else{
return redirect()->route('admin.login');
}
}
我创建了一组前缀为admin
的路由。
我需要的是,当我使用URL localhost:8000/admin
时,它应检查admin用户的身份验证,如果用户已登录,则应显示admin仪表板,否则将其重定向到admin登录页面:localhost:8000/admin/login
但是这里的问题是我收到了apache错误,内容为:
Not Found
The requested resource /admin was not found on this server.
我还尝试使用htaccess文件将其放置在root/public/admin
位置,它虽然解决了我的问题,但是我必须使用此url。
localhost:8000/index.php/admin
我的网址中不需要index.php。
这是我的.htaccess文件的外观:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
请帮助我解决该问题。
答案 0 :(得分:0)
检查用户是否通过身份验证的常规方法是Middleware
在您的情况下,当您转到localhost:8000/admin/
或localhost:8000/admin/check-auth
时运行check-auth,否则laravel将不会检查身份验证。
请查看Laravel中间件。
答案 1 :(得分:0)
我认为最好的方法是使用中间件检查登录用户是否为admin,这将使您的代码比现在更优雅。
您只需要使中间件检查它是否为admin ..如果它为admin,然后返回$next($request)
,如果没有重定向到其他页面。
然后更改您的代码。
Route::prefix('admin')->group(function () {
Route::get('/', 'AdminController@index');
});
然后创建管理控制器并添加索引功能,如
public function __construct()
{
$this->middleware('admin');
}
public function index()
{
return view('adminpage');
}