Php Laravel 5.4中的身份验证中间件
我对laravel中的中间件有一个问题。我想制作一个中间件,允许刚刚注册的用户登录。“是的”,我知道我可以通过“php artisan make:auth”实现这一点,但我想制作自己的中间件。 如果我输入url“/dashboard”,它会将我重定向到dashboard,这是非常糟糕的 也可以用于登录 所以我写了:Php Laravel 5.4中的身份验证中间件,php,laravel,Php,Laravel,我对laravel中的中间件有一个问题。我想制作一个中间件,允许刚刚注册的用户登录。“是的”,我知道我可以通过“php artisan make:auth”实现这一点,但我想制作自己的中间件。 如果我输入url“/dashboard”,它会将我重定向到dashboard,这是非常糟糕的 也可以用于登录 所以我写了: <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth;
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class AuthUser
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::guard()->guest()) {
return redirect()->route('home');
}
return $next($request);
}
}
以下是我的路线:
Route::get('/', function () {
return view('welcome');
})->name('home');
Route::post('/signup',[
'uses'=>'UserController@postSignUp',
'as'=>'signup'
]);
Route::post('/signin',[
'uses' =>'UserController@postSignIn',
'as' =>'signin'
]);
Route::group(['middleware'=>['auth_user']],function (){
Route::get('/dashboard',[
'uses' => 'UserController@getDashboard',
'as' => 'dashboard',
]);
});
和我的用户控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\Auth;
class UserController extends Controller
{
public function getDashboard()
{
return view('dashboard');
}
public function postSignUp(Request $request)
{
$this->validate($request,[
'email' => 'email|unique:users',
'first_name'=> 'required|max:128',
'password' => 'required|min:6'
]);
$email=$request['email'];
$password=bcrypt($request['password']);
$first_name=$request['first_name'];
$surname=($request['surname']);
$user=new User();
$user->email=$email;
$user->password=$password;
$user->first_name=$first_name;
$user->surname=$surname;
$user->save();
Auth::login($user);
return redirect()->route('dashboard');
}
public function postSignIn(Request $request)
{
$this->validate($request,[
'email' => 'required|email',
'password' => 'required|min:6'
]);
if(Auth::attempt(['email' => $request['email'], 'password'
=>$request['password']]))
{
return redirect()->route('dashboard');
}
return redirect()->back();
}
}
在routes/web.php中定义路由时,不需要使用“web”中间件
默认情况下,它通过RoutingServiceProvider应用于routes/web.php路由
Route::group(['middleware'=>['auth_user']],function (){
Route::get('/dashboard',[
'uses' => 'UserController@getDashboard',
'as' => 'dashboard',
]);
});
在5.4中,您可以访问web.php
中的路由。我从路由中删除了它,但仍然不起作用。谢谢,现在如果我键入/dashboard,我会重定向到backpage,但如果我登录,它不会重定向到dashboard。问题可能出在中间件classRoute::get('/',function(){return view('welcome');})->name('home中;路由::post('/signup',['使用'=>'UserController@postSignUp“,”作为“=>”注册“]);路由::post('/signin',['使用'=>'UserController@postSignIn“,”作为“=>”签名“]);Route::group(['middleware'=>['auth_user']],function(){Route::get('/dashboard',['uses'=>'UserController@getDashboard“,”作为“=>”仪表板“,]”;});
Route::group(['middleware'=>['auth_user']],function (){
Route::get('/dashboard',[
'uses' => 'UserController@getDashboard',
'as' => 'dashboard',
]);
});