[英]How to use more than one table to auth in Laravel 5.6 ?
這是我想在laravel 5.6中進行身份驗證的表結構:
權限 :permission_id,權限
登錄名 :login_id,權限ID,全名,密碼
電子郵件 :email_id,login_id,電子郵件
電話 :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');
}
}
?>
你可以寫這個。 希望這可以解決您的問題。
<?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!');
}
}
}
感謝大家的重播
我解決了,這是我的代碼,id做了什么,我用login_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');
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.