пользователь не остается в системе — laravel 5.7

#php #laravel #laravel-5.7 #web-development-server

#php #laravel #laravel-5.7 #веб-разработка-сервер

Вопрос:

Я сталкиваюсь с проблемой, когда пользователь на веб-сайте после входа перенаправляет его на домашнюю страницу, и все работает нормально, но когда пользователь переходит на любую другую страницу, он больше не входит в систему, и я не знаю, в чем проблема.

извините, что я новичок в этом, поэтому, если вам что-то нужно еще, просто скажите мне

Я использую: laravel: 5.7 php: 7.1.3

маршруты:

 <?php

use AppHttpControllersPagesController;



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

Route::get('/login','PagesController@login');
Route::post('/login','PagesController@validateLogin');

Route::post('/signup','PagesController@insert');
Route::get('/signup','PagesController@signup');


Route::get('/postRequest','PagesController@postRequest');
Route::post('/postRequest','PagesController@postuser');

Route::get('/session','PagesController@usession');
  

Файл конфигурации сеанса:

 use IlluminateSupportStr;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Session Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default session "driver" that will be used on
    | requests. By default, we will use the lightweight native driver but
    | you may specify any of the other wonderful drivers provided here.
    |
    | Supported: "file", "cookie", "database", "apc",
    |            "memcached", "redis", "array"
    |
    */

    'driver' => env('SESSION_DRIVER', 'file'),

    /*
    |--------------------------------------------------------------------------
    | Session Lifetime
    |--------------------------------------------------------------------------
    |
    | Here you may specify the number of minutes that you wish the session
    | to be allowed to remain idle before it expires. If you want them
    | to immediately expire on the browser closing, set that option.
    |
    */

    'lifetime' => env('SESSION_LIFETIME', 120),

    'expire_on_close' => false,

    /*
    |--------------------------------------------------------------------------
    | Session Encryption
    |--------------------------------------------------------------------------
    |
    | This option allows you to easily specify that all of your session data
    | should be encrypted before it is stored. All encryption will be run
    | automatically by Laravel and you can use the Session like normal.
    |
    */

    'encrypt' => false,

    /*
    |--------------------------------------------------------------------------
    | Session File Location
    |--------------------------------------------------------------------------
    |
    | When using the native session driver, we need a location where session
    | files may be stored. A default has been set for you but a different
    | location may be specified. This is only needed for file sessions.
    |
    */

    'files' => storage_path('framework/sessions'),

    /*
    |--------------------------------------------------------------------------
    | Session Database Connection
    |--------------------------------------------------------------------------
    |
    | When using the "database" or "redis" session drivers, you may specify a
    | connection that should be used to manage these sessions. This should
    | correspond to a connection in your database configuration options.
    |
    */

    'connection' => env('SESSION_CONNECTION', null),

    /*
    |--------------------------------------------------------------------------
    | Session Database Table
    |--------------------------------------------------------------------------
    |
    | When using the "database" session driver, you may specify the table we
    | should use to manage the sessions. Of course, a sensible default is
    | provided for you; however, you are free to change this as needed.
    |
    */

    'table' => 'sessions',

    /*
    |--------------------------------------------------------------------------
    | Session Cache Store
    |--------------------------------------------------------------------------
    |
    | When using the "apc" or "memcached" session drivers, you may specify a
    | cache store that should be used for these sessions. This value must
    | correspond with one of the application's configured cache stores.
    |
    */

    'store' => env('SESSION_STORE', null),

    /*
    |--------------------------------------------------------------------------
    | Session Sweeping Lottery
    |--------------------------------------------------------------------------
    |
    | Some session drivers must manually sweep their storage location to get
    | rid of old sessions from storage. Here are the chances that it will
    | happen on a given request. By default, the odds are 2 out of 100.
    |
    */

    'lottery' => [2, 100],

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Name
    |--------------------------------------------------------------------------
    |
    | Here you may change the name of the cookie used to identify a session
    | instance by ID. The name specified here will get used every time a
    | new session cookie is created by the framework for every driver.
    |
    */

    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('PHP', 'laravel'), '_').'_session'
    ),

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Path
    |--------------------------------------------------------------------------
    |
    | The session cookie path determines the path for which the cookie will
    | be regarded as available. Typically, this will be the root path of
    | your application but you are free to change this when necessary.
    |
    */

    'path' => '/',

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Domain
    |--------------------------------------------------------------------------
    |
    | Here you may change the domain of the cookie used to identify a session
    | in your application. This will determine which domains the cookie is
    | available to in your application. A sensible default has been set.
    |
    */

    'domain' => env('SESSION_DOMAIN', null),

    /*
    |--------------------------------------------------------------------------
    | HTTPS Only Cookies
    |--------------------------------------------------------------------------
    |
    | By setting this option to true, session cookies will only be sent back
    | to the server if the browser has a HTTPS connection. This will keep
    | the cookie from being sent to you if it can not be done securely.
    |
    */

    'secure' => env('SESSION_SECURE_COOKIE', false),

    /*
    |--------------------------------------------------------------------------
    | HTTP Access Only
    |--------------------------------------------------------------------------
    |
    | Setting this value to true will prevent JavaScript from accessing the
    | value of the cookie and the cookie will only be accessible through
    | the HTTP protocol. You are free to modify this option if needed.
    |
    */

    'http_only' => true,

    /*
    |--------------------------------------------------------------------------
    | Same-Site Cookies
    |--------------------------------------------------------------------------
    |
    | This option determines how your cookies behave when cross-site requests
    | take place, and can be used to mitigate CSRF attacks. By default, we
    | do not enable this as other CSRF protection services are in place.
    |
    | Supported: "lax", "strict"
    |
    */

    'same_site' => null,

];
  

PageController:

 <?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use databasemigrations;
use DB;
use Validator;
use Appusers;
use AppHttpControllersController;
use IlluminateSupportFacadesHash;
 //Abdulmalik
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesSession;
class PagesController extends Controller
{
    public function index() {

        return view('index');
    }
    public function postRequest() {

        return view('postRequest');
    }
    public function postuser() {
        $user1 = new users();
    $email = request('reqName');
    $pass = request('reqDesc');
    $fn = request('category');
    $ln = request('skills');
$user1->email =$email;
$user1->password=$pass;
$user1->firstName=$fn;
$user1->lastName=$ln;

$user1->save();

        return view('postRequest');
    }
    public function login() {
        return view('login');
    }
    public function validateLogin(Request $request)
    {
        $this->validate($request, [
           'email' => 'required',
            'password' => 'required',
        ]);
         if (Auth::attempt(['email' =>  request('email'), 'password' =>  request('password')])) {
             // Success
            // $message = "successfully login ";
            // echo "<script type='text/javascript'>alert('$message');</script>";

             //$value = $request->session()->all();//Session::get('laravel_session');
             //Session::put('userId', $value);
             //$request->session()->keep(['laravel_session']);
             //echo $value;
             return view('index');



         } else {
             return "something happened"/*redirect()->back()*/;
         };
    }
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }

    public function signup() {
        return view('signup');
    }


    protected function validator(array $data)
    {
        return Validator::make($data, [
            'firstName' => 'required|string|max:255',
            'lastName' => 'required|string|max:255',
            'email' => 'unique:users,email',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }


    public function insert(){
        $errors="";
        $firstName = request('Fname');
        $lastName = request('Lname');
        $pass = request('password');
        $em = request('email');
        $conpass = request('conPassword');
        $validation = Validator::make(
            [ //parameters
                'firstName' => request('Fname'),
                'lastName' => request('Lname'),
                'password' => request('password'),
                'email' => request('email'),
                'password_confirmation' => request('conPassword'),
            ], //rule
            [
                'firstName' => ['required','string','max:255' ],
                'lastName' => ['required','string','max:255' ],
                'password' => ['required','string','min:6','confirmed' ],
                'password_confirmation' => [],
                'email' => ['required', 'email','unique:users'],
            ],//error messages
            ['firstName.required' =>"الرجاء إدخال الاسم الأول *",
                'lastName.required' =>"الرجاء إدخال اسم العائلة *",
                'password.required' =>"الرجاء إدخال كلمة المرور *",
                'password.min' =>"كلمة المرور يجب ان تتكون من ستة خانات على الأقل *",
                'password.confirmed' =>"كلمة المرور يجب ان تتطابق *",
                'email.required' =>"الرجاء إدخال البريد الالكتروني *",
                'email.unique' =>"البريد الالكتروني مسجل مسبقا *ً",
                'email.email' =>"البريد الالكتروني يجب ان يكون بالصيغة الصحيحة *ً",

            ]
        );

        if ( $validation->fails() ) {
            $errors = $validation->messages();
            return redirect()->back()->withErrors($errors);
        }
        else{
            if($pass!=null) {
                $pass = Hash::make(request('password'));
            }
            $user1 = new users();
            $user1->email =$em;
            $user1->password=$pass;
            $user1->firstName=$firstName;
            $user1->lastName=$lastName;
            $user1->save();
            /*$data = array("email" => $em, "password" => $pass, "firstName" => $firstName, "lastName" => $lastName);
            DB::table('users')->insert($data);*/
        }



        return redirect('/');
    }


    public function usession(Request $request){
      dd($request->session()->all());
    }
}
  

Контроллер входа:

 <?php

namespace AppHttpControllersAuth;

use AppHttpControllersController;
use IlluminateFoundationAuthAuthenticatesUsers;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    protected function authenticated()
    {
        // Update last_session after logged-in
        User::find(Auth::id())->update(['laravel_session'=>Session::getId()]);
    }

}
  

результат: php artisan route:список

Комментарии:

1. Ваши маршруты никогда не вызывают LoginController, почему вы опубликовали это? Laravel 5.7 поставляется с полной системой аутентификации, я думаю, это пользовательская система, верно?

2. пожалуйста, покажите нам результат этой команды php artisan route:list

3. @DitoKhelaia я только что обновил сообщение результатами, которые вы просили

4. @dparoli я новичок в этом извините, у вас есть какие-либо ссылки, которые могут помочь мне использовать систему авторизации laravel ?! помимо документации laravel.

5. Попробуйте изменить $this->middleware('guest')->except('logout'); на это $this->middleware('auth'); в вашем методе PagesController __construct

Ответ №1:

Как показано в вашем файле routes, для ваших маршрутов входа в систему вы вызываете функции login и validateLogin на PagesController, а в вашем PagesController в функции construct у вас есть промежуточное программное обеспечение, защищающее функции на этом контроллере, с помощью гостевого промежуточного программного обеспечения. Чтобы пояснить вам это, промежуточное программное обеспечение здесь это все равно, что сказать, что все функции, существующие на этом контроллере, видны только гостям, и именно поэтому, когда вы входите в систему и переходите к другим маршрутам, вызывающим функции на PagesController, промежуточное программное обеспечение будет препятствовать вам, потому что эти маршруты предназначены только для гостей (пользователей, которые не вошли в систему), поэтому, чтобы решить эту проблему, вы можете попробовать одно из этих решений:

  • В методе construct в PagesController измените его на

$this->middleware('guest', ['only' => [ 'login', 'validateLogin' ]]);

  • Или переместите login и validateLogin в LoginController, чтобы вы могли настроить промежуточное программное обеспечение для их размещения. (И это лучшее решение для организации вашего кода)

Комментарии:

1. спасибо за вашу помощь, я сделал именно то, что вы сказали, и я получил ошибку при запуске приложения: imgur.com/tMgnSk0

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

3. (1) -для первого решения я получил эту ошибку после его применения: ссылка (2)-для второго решения веб-сайт работает, но когда я пытаюсь зайти на страницу входа, я получаю эту ошибку: ссылка

4. 1- Для первого решения измените его на это $this->middleware('guest', ['only' => [ 'login', 'validateLogin' ]]); есть ошибка опечатки