繁体   English   中英

如何在Laravel 5.6中使用多个表进行身份验证?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM