Это моя структура таблиц, которую я хочу сделать в 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');
}
}
?>
так как я могу это сделать?
В связанном разделе руководства есть некоторые подробности, но я должен вас предупредить, это непросто.
я хочу что-то вроде этого ВЫБЕРИТЕ * ИЗ логина ПРИСОЕДИНЯЙТЕСЬ к электронной почте на адрес электронной почты.login_id = login.login_id ПРИСОЕДИНЯЙТЕСЬ к телефону НА phone.login_id = login.login_id Разрешение ПРИСОЕДИНЯТЬСЯ НА разрешение.permission_id = login.permission_id ГДЕ email = '?' ИЛИ phone_number = '?'






Вы можете написать это. Надеюсь, это решит вашу проблему.
<?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 = '?'
всем спасибо за повторы
я решаю это и это мой код
что сделал 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');
}
}
Я не думаю, что встроенная аутентификация laravel сработает для вас, вам, вероятно, понадобится реализовать кастомная охрана, а также пользовательский провайдер.