Как использовать более одной таблицы для авторизации в Laravel 5.6?

Это моя структура таблиц, которую я хочу сделать в laravel 5.6:

permission: permission_id , permission

login: login_id , permission_id , Full_name , password

email: email_id , login_id , email

phone: phone_id , login_id , phone_number

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

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

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller {

use AuthenticatesUsers;

    public function showLoginForm() {
        return view('panel.login');
    }

     public function username()
    {
        return 'email';
    }


    protected function attemptLogin(Request $request)
    {

        $username = $request->username;

        return $this->guard()->attempt(
            $this->credentials($request), $request->filled('remember')
        );

    }

    protected $redirectTo = '/panel';

    public function __construct() {
        $this->middleware('guest')->except('logout');
    }

}
?>

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

apokryfos 24.09.2018 14:29

так как я могу это сделать?

Safin Mohammed 24.09.2018 15:13

В связанном разделе руководства есть некоторые подробности, но я должен вас предупредить, это непросто.

apokryfos 24.09.2018 15:14

я хочу что-то вроде этого ВЫБЕРИТЕ * ИЗ логина ПРИСОЕДИНЯЙТЕСЬ к электронной почте на адрес электронной почты.login_id = login.login_id ПРИСОЕДИНЯЙТЕСЬ к телефону НА phone.login_id = login.login_id Разрешение ПРИСОЕДИНЯТЬСЯ НА разрешение.permission_id = login.permission_id ГДЕ email = '?' ИЛИ phone_number = '?'

Safin Mohammed 24.09.2018 15:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
783
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете написать это. Надеюсь, это решит вашу проблему.

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller {
    use AuthenticatesUsers;
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/panel';
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct() {
        $this->middleware('guest', ['except' => 'logout']);
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function login() {
        return view('panel.login');
    }
    protected function credentials(Request $request) {
        $field = filter_var($request->input($this->username()), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        $request->merge([$field => $request->input($this->username())]);
        return array_merge($request->only($field, 'password'));
    }
    public function username() {
        return 'email';
    }
    public function authenticate(Request $request) {
        $credentials = $this->credentials($request);
        if (Auth::attempt($credentials)) {
            return redirect()->intended('/');
        } else {
            return redirect()->intended('login')->with('error', 'Invalid login credentials. Check your email address or username and password!');
        }
    }
}

это не работает для меня, это работает, если поле электронной почты было в таблице входа в систему, в моем случае это в другой таблице, мне нужно что-то вроде этого: SELECT * FROM login JOIN email on email.login_id = login.login_id JOIN phone ON phone.login_id = login.login_id Разрешение JOIN ON permission.permission_id = login.permission_id ГДЕ email = '?' ИЛИ phone_number = '?'

Safin Mohammed 24.09.2018 14:56
Ответ принят как подходящий

всем спасибо за повторы
я решаю это и это мой код что сделал id, я сделал логин с login_id и паролем но я получаю login_id из электронной почты или телефонного стола поэтому я получаю логин_ид электронной почты, которую ввел пользователь

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use App\Email;
use App\Phone;

class LoginController extends Controller {


use AuthenticatesUsers;

    public function showLoginForm() {
        return view('panel.login');
    }

    public function username() {
        return 'username';
    }

    protected function attemptLogin(Request $request) {

        $id = '0';
        $username=trim( $request->username );
        if ( filter_var($request->input($this->username()), FILTER_VALIDATE_EMAIL) ) {
           $id= Email::select('login_id')->where('email',$username)->first();

        }elseif (is_numeric($username)) {
            $id= Phone::select('login_id')->where('phone_number',$username)->first();
        }        
        $id=($id==null)?0:$id->login_id;        
        return $this->guard()->attempt(
                        ['Login_id' => $id, 'password' => $request->password], $request->filled('remember')
        );

    }


    protected $redirectTo = '/panel';

    public function __construct() {

        $this->middleware('guest')->except('logout');
    }

}

Другие вопросы по теме