Laravel 5.2 Вход в систему не работает

Я создал новую установку Laravel 5.2. И я выполнил следующую команду, чтобы установить аутентификацию Laravel по умолчанию;

php artisan make:auth

Форма регистрации работает, но логин просто перенаправляет домой без входа в систему. И не отображает ошибок, когда я ввожу неправильные учетные данные.

Это мой файл маршрутов:

Route::get('/', 'BaseController@index');

Route::get('/tutors', 'TutorsController@Index');
Route::get('/tutors/myrequest', 'TutorsController@RequestTutor');
Route::get('/tutors/{id}', 'TutorsController@show')->where(['id' => '[0-9]+']);
Route::get('/tutors/{GUID}', 'TutorsController@TutorByGUID')->where(['id' => '[A-Za-z]+[0-9]+']);


/********************Authentication routes**********************************/
Route::group(['middleware' => ['web']], function () {
    Route::auth();
});

Это код из AuthController:

class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers, ThrottlesLogins;


protected $redirectTo = '/';

public function __construct()
{
   $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'firstname' => 'required|max:255',
        'lastname' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|confirmed|min:6',
    ]);
}

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return User
 */
protected function create(array $data)
{
    return User::create([
        'firstname' => $data['firstname'],
        'lastname' => $data['lastname'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
}
}

Это BaseController, который содержит домашний метод;

<?php namespace App\Http\Controllers;
use App\Services\InterfaceService;
use App\Repositories\TutorRepository;
use App\Http\Requests;
use Illuminate\Http\Request;

class BaseController extends Controller {

    protected $TutorRepository;


    protected $InterfaceService;
    public function __construct(InterfaceService $InterfaceService, TutorRepository $TutorRepository)
    {
        //$this->middleware('guest');
        $this->InterfaceService = $InterfaceService;
        $this->TutorRepository = $TutorRepository;
    }

    public function index()
    {
        $tutors = $this->TutorRepository->all();
        $page_info = \Config::get('constants.App.Pages.home');
        $this->InterfaceService->SetPageInfo($page_info);
        return view('home', ['TopTutors'=>$tutors]);
    }

} ?>

Это код из окна входа в систему.

<form role="form" method="POST" action="{{ url('/login') }}" id="login_form">
    {!! csrf_field() !!}
    <div class="mj_login_form">
        <div class="form-group">
            <input type="text" placeholder="Email" id="email" name="email" class="form-control" value="{{ old('email') }}">
            @if ($errors->has('email'))
                <span class="help-block"><strong>{{ $errors->first('email') }}</strong></span>
            @endif
        </div>
        <div class="form-group">
            <input type="password" placeholder="Your Password" id="password" class="form-control" name="password">
            @if ($errors->has('password'))
                <span class="help-block"><strong>{{ $errors->first('password') }}</strong></span>
            @endif
        </div>
        <div class="row">
            <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 mj_toppadder20">
                <div class="form-group  pull-left">
                    <div class="mj_checkbox">
                        <input type="checkbox" value="1" id="check2" name="remember">
                        <label for="check2"></label>
                    </div>
                    <span> remember me</span>
                </div>
            </div>
            <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 mj_toppadder20">
                <div class="form-group pull-right">
                    <span><a href="{{ url('/password/reset') }}">forget password ?</a></span>
                </div>
            </div>
        </div>
    </div>
    <div class="mj_pricing_footer">
        <a href="#" onclick="$('#login_form').submit()">login Now</a>
    </div>
</form>

person Community    schedule 16.04.2016    source источник
comment
Пожалуйста, также включите файл просмотра входа в систему.   -  person Bogdan    schedule 16.04.2016
comment
Я думаю, что я должен добавить вредоносную программу Auth, но я не уверен, как настроить ее с помощью маршрутов. Мои попытки привели к бесконечному циклу на странице входа. Я также посмотрел на добавление \ App \ Http \ Middleware \ Authenticate :: class в Kernel.php $ middlewareGroups, но это тоже не сработало.   -  person    schedule 16.04.2016
comment
Начиная с версии 5.2.27, все маршруты в app/Http/routes.php уже включены в web группу промежуточного программного обеспечения. Попробуйте удалить группу маршрутов вокруг вашего Route::auth().   -  person patricus    schedule 16.04.2016
comment
Пожалуйста, вставьте домашний контроллер   -  person devnull    schedule 16.04.2016
comment
Я использую созданный мной BaseController. Я удалил группу промежуточного программного обеспечения для Интернета, но все же логин просто перенаправляет меня на домашнюю страницу, если учетные данные верны. И нет никаких указаний на то, что я вошел в систему. Но это работает, когда я создаю новую учетную запись. Каким-то образом ошибки теперь отображаются на странице входа.   -  person    schedule 16.04.2016
comment
Регистрация не работает, когда я удаляю группу промежуточного программного обеспечения. Когда я удаляю Route :: group (['middleware' = ›['web']], function () {around Route :: auth (); Регистрация не выполняется.   -  person    schedule 16.04.2016
comment
если вы хотите, чтобы индекс в базовом контроллере был доступен только аутентифицированным пользователям. добавить промежуточное ПО [auth] к этому маршруту. (Промежуточное программное обеспечение Web), поскольку в этом сценарии вам нужны сеансы. Мой вопрос, если учетные данные для входа неверны, вы перенаправляете на страницу входа с ошибками?   -  person devnull    schedule 16.04.2016
comment
Проблема заключалась в том, что при миграции пользователей не было первичного инкрементного ключа. Я случайно изменил идентификатор при миграции пользователей на $ table- ›bigInteger (я заметил, что Laravel eloquent не выбирает никаких данных, если нет первичного ключа Incremetal.   -  person    schedule 16.04.2016


Ответы (1)


Это происходит потому, что ваш '/' маршрут не входит в web группу промежуточного программного обеспечения, и вы не используете auth промежуточное ПО для маршрутов, которые хотите аутентифицировать.

Это означает, что при доступе к этому маршруту сеанс недоступен, и промежуточное ПО auth не запускается, поэтому аутентификация не работает.

Попытайтесь поместить все маршруты, в которых вы хотите использовать сеанс, в web группу промежуточного программного обеспечения, а для маршрутов, в которых вы хотите выполнить аутентификацию, используйте auth промежуточное программное обеспечение:

Route::group( ['middleware' => ['web'] ], function () {     

    /* these routes use 'auth' middleware, so only an authenticated user will access*/
    Route::group( ['middleware' => 'auth' ], function () {
        Route::get('/', 'BaseController@index');
    });

    Route::auth();
});

Примечание о версии Laravel:

Имейте в виду, что если вы используете Laravel версии> = 5.2.27, промежуточное ПО web используется по умолчанию на каждом маршруте, определенном в routes.php, как вы можете видеть в app/Providers/RouteServiceProvider.php:

protected function mapWebRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace, 'middleware' => 'web'
    ], function ($router) {
        require app_path('Http/routes.php');
    });
}

В этом случае вы можете удалить свой оператор для использования web группы промежуточного программного обеспечения, но вам нужно будет использовать только auth промежуточное ПО для аутентифицированных маршрутов.

person Moppo    schedule 17.04.2016