我在laravel中创建了一个登录模块,我已经完成的工作是我已成功手动验证用户并在仪表板页面上重定向但我的问题 当用户从应用程序注销时,如果他们尝试打开它,则再次注销 仪表板URL然后它在RouteCollection 中显示错误 MethodNotAllowedHttpException此时我想要的是如果用户未经过身份验证然后 它将直接重定向到我们的登录页面。我也尝试在我的LoginController构造函数中放入一些逻辑,但它也无法正常工作.Below是我的代码,带有文件路径。
laravelproject \应用\ HTTP \ routes.php文件
Route::auth();
Route::post('/login-submit', 'LoginController@loginSubmit');
Route::get('/log-out',[
'uses'=>'LoginController@logOut',
]);
laravelproject \应用\ HTTP \控制器\ LoginController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
//to take input from user
use App\Http\Requests;
use Illuminate\Http\Request;
//end
class LoginController extends Controller
{
public function loginSubmit(Request $request)
{
$email=$request->email;
$password=$request->password;
//var_dump($credentials);die;
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// Authentication passed...
return view('dashboard');
}
else
{
return view('auth/login');
}
}
public function logOut() {
Auth::logout();
return view('auth/login');
}
}
登出并尝试访问仪表板URL时出错 RouteCollection中的MethodNotAllowedHttpException
答案 0 :(得分:1)
您需要在此处使用中间件。在App \ Http \ middleware
中创建中间件class administrator
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ( Auth::check() && Auth::user()->isAdmin() )
{
return $next($request);
}
return redirect('signin');
}
}
现在在web.php中,您将此中间件分配到仪表板路由,以便仪表板只能由管理员访问
Route::get('/', 'Dashboard@dashboard')->middleware(['administrator']);
对于Auth :: user() - &gt; isAdmin()在users表中将boolean字段定义为'admin' 然后在用户模型中定义方法isAdmin,如下所示:
public function isAdmin()
{
return $this->admin;
}
现在这个过程将是流线型的。无论您为中间件管理员分配哪条路由,它都会为管理员验证该路由。在身份验证失败时,它会将用户发送到登录页面
答案 1 :(得分:0)
为您的用户维护会话,并在loginsubmit()函数中首先检查是否存在使用会话,然后返回到仪表板视图。在注销操作中将用户会话刷新为
public function loginSubmit(Request $request)
{
if (Session::has('user')) {
return view('dashboard');
}
$email=$request->email;
$password=$request->password;
//var_dump($credentials);die;
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// Authentication passed...
$authData = Auth::user();
$userData = $authData['original'];
Session::put('user', $authData['original']);
return view('dashboard');
}
else
{
return view('auth/login');
}
}
public function logOut() {
Auth::logout();
Session::forget('user');
return view('auth/login');
}