清除缓存后输入错误密码时Laravel 5.4 MethodNotAllowedHttpException错误

时间:2018-02-02 09:56:58

标签: php laravel

我的登录表单有两个文本字段email,密码。当我尝试使用凭证登录时,它工作正常但是当清除缓存然后尝试登录时会出现'MethodNotAllowedHttp'异常。我没有得到问题为什么它是显示此错误。我的代码如下:

   Route::post('users/login/5', 'administrator\usersController@login')->name('sl'); 


    usersController.php
    namespace App\Http\Controllers\administrator;
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Validation\Validator;
    use Session;

    class FreeusersController extends Controller {

        function login(Request $request) {
            $type = $request->segment(3);

            //print_r($request);
            echo "type=".$type; 
            echo $request->input('email');
            echo $request->input('password');

            die("sss");

            if ($request->isMethod('post') && !empty($type)) {
                $this->validate($request, [
                    'email' => 'required|min:5,max:50',
                    'password' => 'required|min:5,max:50'
                ]);
                switch ($type) {
                    case 5:
                        $condArr = ['email' => $request->input('email'), 'password' => $request->input('password'), 'type' => '5', 'role' => 'father'];
                        break;
                    case 4:
                        $condArr = ['email' => $request->input('email'), 'password' => $request->input('password'), 'type' => '4', 'status' => true];
                        break;
                }

                if (Auth::attempt($condArr)) {
                    return redirect('administrator/dashboard');
                } else {
                    return redirect(url()->previous())->withErrors(['password' => 'Invalid credentials'])->withInput();
                }

            } else {
                return redirect("/");
            }
        }
    }

<form action="/users/login/5" id="login-form" method="post" class="smart-form client-form">

    {{ csrf_field() }}
    <fieldset>
        <section>
            <label class="label">Email</label>
            <label class="input"> <i class="icon-append fa fa-user"></i>
                <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}">
        </section>
        <section>
            <label class="label">Password</label>
            <label class="input"> <i class="icon-append fa fa-lock"></i>
                <input id="password" type="password" class="form-control" name="password">
        </section>
    </fieldset>
    <footer>
        <button type="submit" class="btn btn-primary">
            LogIn
        </button>
    </footer>
</form>

3 个答案:

答案 0 :(得分:0)

你必须清除路线:

php artisan route:cache

然后它会记住登录操作已发布。

答案 1 :(得分:0)

我认为您收到此错误的原因是,当您调用此网址时,会有另一个网址,例如users/{id},这意味着users/之后的任何内容。可能是你正在使用资源路线。因此,当您调用网址users/login/5时,login/5$id作为users/{id}网址的GET

但该网址适用于action="{{route('sl', ['id'=>5])}}"方法。您使用post方法调用此方法,因此您收到此错误。

<强>解决方案

您可以尝试使用以下路线方法调用您的网址:

Route::post('user/login/5', 'administrator\usersController@login')->name('sl');

如果它不起作用,那么您可以将路线更改为其他内容。例如:

user

在这里,您可以使用users代替users,因为您已经有一个related-publication的网址。不要忘记改变你的行动。

答案 2 :(得分:0)

首先使用php artisan route查看你的路线:list。

那么你确定你的请求动词吗?查看导航器控制台以查看您的请求。