Laravel Система аутентификации Эта страница не может обработать запрос - PullRequest
0 голосов
/ 03 августа 2020

Когда я хочу открыть страницу системы аутентификации администратора, чтобы получить следующие ошибки. Кроме того, я использую локальный сервер XAMPP. первая полученная ошибка: допустимый размер памяти 536870912 байт исчерпан. теперь я нашел решение, поэтому я увеличил предел размера памяти из файла php .ini.

затем получена вторая ошибка: превышено максимальное время выполнения 60 секунд. теперь я нашел решение, поэтому я увеличил максимальное время выполнения с php .ini файла.

, тогда страница не открывается, потому что эта страница не может обработать запрос. Есть у кого-нибудь решение?

Маршруты:

Auth::routes();
Route::middleware('auth')->group(function (){
    Route::get('/dashboard',function (){
        return view('dashboard');
    });
    Route::get('/faculty', function (){
        $title='Faculty Console';
        return view('faculty-dashboard',compact('title'));
    });
    Route::get('/student', function (){
        $title='Student Console';
        return view('user-dashboard',compact('title'));
    });
    Route::prefix('admin')->group(function () {
        Route::get('/', function (){
            $student=User::all()->where('user_role','student')->count();
            $employee=User::all()->where('user_role','employee')->count();
            $title='Admin Console';
            return view('admin.admin-dashboard',compact('title','student','employee'));
        });
        Route::resource('selection','SelectionController');
        Route::get('selection/{id}/pivot-create/','SelectionController@pivotCreate')->name('pivotCreate');
        Route::get('selection/{id}/pivot-destroy/','SelectionController@pivotDestroy')->name('pivotDestroy');
    });
});

Auth. php

    'defaults' => [
        //'guard' => 'web',
        'guard' => 'user',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'user' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    'password_timeout' => 10800,

Приложение / Пользователь. php

class User extends Authenticatable
{
    use Notifiable;
    protected $guarded = [];
    protected $table='users';
    protected $hidden = ['password', 'remember_token',];
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
    protected $dates = ['created_at', 'updated_at'];
}

LoginController

class LoginController extends Controller
{
    use AuthenticatesUsers;
    public function username()
    {
        return 'user_name';
    }
    protected function redirectTo(){
        if (Auth::user()->user_role == 'admin' && Auth::user()->status == '1'){
            //alert()->message('Welcome','Admin')->closeOnClickOutside();
            return '/admin';
        }
        elseif (Auth::user()->user_role == 'faculty' && Auth::user()->status == '1'){
            //alert()->message('Welcome','Faculty')->closeOnClickOutside();
        return '/faculty';
        }
        elseif (Auth::user()->user_role == 'student' && Auth::user()->status == '1'){
            //alert()->message('Welcome','Student')->closeOnClickOutside();
            return '/student';
        }
        else
            return redirect('/login');
    }

    public function logout()
    {
        Auth::logout();
        //session()->flash('msg_logout', 'Panel System Successfully Logout');
        alert()->success('You have been logout successfully','GoodBye');
        //session()->flush();
        return redirect('/login');
    }
    public function showLoginForm(){
        $title='TheMSC-Sign-In Panel-System';
        return view('log-in',compact('title'));
    }
}

RegisterController

class RegisterController extends Controller
{
    use RegistersUsers ;
    protected $redirectTo = RouteServiceProvider::HOME;
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'cnic' => ['required','string'],
            'user_name'=>[ 'required','string','unique:users','regex:[a-z\d-]'],
            'user_role'=>[ 'required','string'],
            'email' => [ 'required', 'string', 'email:filter,dns'],
            'password' => [ 'required', 'string', 'confirmed','regex:[a-zA-Z\d $&+,:;=?@#|\'<>.^*()%!-]'],
        ]);
    }

    protected function create(array $data)
    {
        return User::create([
            'cnic' => $data['cnic'],
            'user_name' => $data['user_name'],
            'user_role' => $data['user_role'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);

    }


}

1 Ответ

1 голос
/ 03 августа 2020

В вашем файле маршрутов есть кое-что, что вы можете изменить.

Route::get('/', function () {
    $student = User::all()->where('user_role', 'student')->count();
    $employee = User::all()->where('user_role','employee')->count();
    $title = 'Admin Console';
    
    return view('admin.admin-dashboard', compact('title','student','employee'));
});

Замените

$student = User::all()->where('user_role', 'student')->count();
$employee = User::all()->where('user_role', 'employee')->count();

на

$student = User::where('user_role', 'student')->count();
$employee = User::where('user_role', 'employee')->count();

Почему? User::all:

  • Создает select * from users
  • Создает объект Illuminate\Database\Eloquent\Collection со всеми строками, только что возвращенными базой данных.

Это может потреблять много памяти, когда вы работаете с большим количеством пользователей. Вы делаете этот запрос дважды. Затем используйте ->where(...), чтобы отфильтровать Collection, что, опять же, может потреблять много памяти при работе с большим количеством пользователей. Затем вы используете ->count(), чтобы уменьшить его до единственного значения, что означает, что все данные, которые вы запросили и преобразовали в Collection, были напрасны.

Если вам просто нужен счет, позвольте базе данных сделать это . User::where('user_role', 'student')->count(); переводится как select count(*) from users where user_role = student.

...