Панель администратора, использующая сессию в Laravel - Получение MethodNotAllowedHttpException - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать простую панель администратора, используя сессию в Laravel.Я не планирую использовать аутентификацию Laravel.Я получаю ошибку.Я понимаю, что это происходит из-за метода get в файле web.php, я даже изменил его на post, но все еще не работает.Пожалуйста, помогите, я получаю ошибку ниже.-

Строка 251 RouteCollection.php в RouteCollection-> methodNotAllowed (массив ('GET', 'HEAD')) в строке RouteCollection.php 238

Login.blade.php -

@php
    session_start();
    echo isset($_SESSION['login']);

    if(isset($_SESSION['login'])) {
        header('LOCATION:dashboard'); die();
    }
@endphp

<html>
<body>
    <h3>Login</h3>

@php
      if(isset($_POST['submit'])){
        $username = $_POST['username']; 
        $password = $_POST['password'];

        if($username === 'admin' && $password === 'password')
        {
            $_SESSION['login'] = true; header('LOCATION:dashboard'); die();

        } else {
            echo "Username and Password do not match";
        }

      }
 @endphp
    <form action="" method="post">

        Username:
        <input type="text"  id="username" name="username" required>


        Password:
        <input type="password" id="pwd" name="password" required>

        <button type="submit" name="submit">Login</button>
    </form>

</body>
</html>

Web.php -

Route::get('/admin', function () {
    return view('admin.login');
});

Route::get('/dashboard', function () {
    return view('admin.dash');
});

Dash.blade.php -

@php
    session_start();
    if(!isset($_SESSION['login'])) {
        header('LOCATION:admin'); die();
    }
@endphp
<!DOCTYPE html>
<html>
<body>
    <h3>Dashboard</h3>
</body>
</html>

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вы только что написали метод git там.вам нужно добавить метод post, так как вы выполняете обе операции на одной и той же странице.

Route::post('/admin', function () {
   return view('admin.login');
});

Также не рекомендуется делать это выше, так как вы пишете код в блейд-файлах Laravel, ноэто как Core PHP.Я предложу использовать контроллер для этого.Таким образом, вы можете создать другой маршрут и передать эти данные для маршрутизации доступа к контроллеру, после чего вы можете выполнить действие там.

<form action="/admin" method="post">
//your form
</form>

И в своем файле маршрута направьте свой маршрут к контроллеру

Route::post('/admin', 'yourController@yourMethod');

проверить эту ссылку https://laravel.com/docs/5.7/routing

0 голосов
/ 25 октября 2018

В Laravel вы должны передать csrf_token при использовании метода post.Перейдите по ссылке о токене csrf https://laravel.com/docs/5.7/csrf. Добавьте приведенный ниже код в ваш файл просмотра.

/////In your view file///////

    <form action="/admin" method="post">
    //your form
           {{ csrf_field() }} ///add the csrf_token field
    </form>

/////////////////////

И добавьте код в Web.php

Route::post('/admin', function () {
   return view('admin.login');
});
0 голосов
/ 25 октября 2018

Похоже, вы пытаетесь использовать представление для начального получения, а также отправку сообщения в форме.Как правило, это плохая практика, и вы также используете много простого php вне фреймворка, что не рекомендуется.

Тем не менее, вы можете попробовать выполнить:

Route::match(['get', 'post'], function () {
    return view('admin.login');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...