Невозможно проверить, истинно ли логическое значение базы данных в Laravel - PullRequest
0 голосов
/ 29 мая 2020

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

LoginController. php

protected function redirectTo()
{
    $user = Auth::user()->id;
    $userOrg = UserOrganization::where('user_id', $user)->first();
    $org = Organization::where('id', $userOrg->org_id)->first();

    if ($org->allow_org_login == 0) {

        return '/login';
    } else {
        if(Auth::user()->has_changed_temp_password == false)
        {
            DB::table('users')->where('id', $user)->update(['last_login' => Carbon::now()]);
            DB::table('users')->where('id', $user)->increment('total_logins');
            return '/user/password/change';
        } else {
            DB::table('users')->where('id', $user)->update(['last_login' => Carbon::now()]);
            DB::table('users')->where('id', $user)->increment('total_logins');
            return '/overview';
        }
    }
}

пытается чтобы войти в систему как пользователь, принадлежащий организации с allow_org_login = 0, следует перенаправить на страницу '/ login', но вместо этого он либо выполняет вход пользователя в систему, либо запрашивает смену пароля для нового пользователя.

Что я делаю не так?

Изменить: отладить содержимое $ org (allow_org_login в нижней строке)

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

для метода redirectTo () он будет срабатывать только тогда, когда мы используем метод POST для входа в систему.

внутри метода redirectTo () ваше условие проверки, а затем вы возвращаете '/ login'; который он перенаправит на страницу входа. но на этот раз вы уже вошли в систему, тогда при входе в систему он проверит, входит ли пользователь, а затем перенаправляет URL-адрес, который мы настраиваем в LoginController и защищаем $ redirectTo; он не будет вызывать метод redirectTo (). Потому что на этот раз мы используем перенаправление с использованием метода GET, а не POST.

если вы хотите поставить проверку на метод redirectTo (), вы можете попробовать следующий код:

protected function redirectTo()
{
    $user = Auth::user()->id;
    $userOrg = UserOrganization::where('user_id', $user)->first();
    $org = Organization::where('id', $userOrg->org_id)->first();

    if ($org->allow_org_login == 0) {
        Auth::logout(); // logout user before redirect
        return '/login';
    } else {
        if(Auth::user()->has_changed_temp_password == false)
        {
           // depend on you choice need to logout or not
            DB::table('users')->where('id', $user)->update(['last_login' => Carbon::now()]);
            DB::table('users')->where('id', $user)->increment('total_logins');
            return '/user/password/change';
        } else {
            // depend on you choice need to logout or not
            DB::table('users')->where('id', $user)->update(['last_login' => Carbon::now()]);
            DB::table('users')->where('id', $user)->increment('total_logins');
            return '/overview';
        }
    }
}

, но для моего варианта я буду создайте новое промежуточное ПО для обработки этого.

0 голосов
/ 29 мая 2020

, поскольку между пользователем и организацией существует связь "многие ко многим". Я предполагаю, что это отношение определено в User & Organization, как в документации:

https://laravel.com/docs/7.x/eloquent-relationships#many -to-many

, учитывая, что:

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

$user = Auth::user();
$userOranization=$user->organizations()->get();
$allowUserToLogin=false;
if($userOranization->where('allow_org_login',1)->first()!=null)
$allowUserToLogin=true;

, а затем:

if ($allowUserToLogin == 0) {

        return '/login';
    } else {  ....
...