我的网站中有一个简单的表单,我想在发布表单之前检查用户当前是否已登录。我把auth中间件放在了后期路线......
Route::post('test','SellController@test_mid')->middleware('auth');
我的身份验证中间件...
<?php
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
此处&#39;登录&#39; 重定向到我的登录页面。
问题出在我点击登录按钮后,错误是......
RouteCollection.php第219行中的MethodNotAllowedHttpException: at RouteCollection-&gt; methodNotAllowed(array(&#39; POST&#39;))in RouteCollection.php第206行
...表格
{{ Form::open(array('url'=>"/test")) }}=
<input type="submit" value="submit">
{{ Form::close() }}
但是,如果我在 GET 路由上设置auth中间件,它可以正常工作。如果是 GET ,如果我已退出,则会将我引导至登录页面。在我提供登录凭据并点击登录按钮后,它会引导我进入所需的 GET 路线。
答案 0 :(得分:0)
确保您的视图表单使用POST方法。
{{Form::open(array('url'=>'/test', 'method'=>'post'))}}
请注意,除非另有说明,否则$guard
变量默认为NULL。有关可用的警卫,请参阅/config/auth.php
配置。
Route::post('test', 'SellController@test_mid')->middleware('auth:web');
答案 1 :(得分:0)
我知道这个问题是个老故事,但看来您还没有答案。我建议在控制器内部使用中间件而不是路由。
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
class YourController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function yourFunction(Request $request){
// your action
}
}
对于我来说,无论是GET还是POST方法,它都很好。