单用户表的多种登录方法

时间:2019-08-20 17:12:57

标签: php laravel authentication

我正在开发Laravel应用程序,我们已经接近完成,客户端突然希望我们实现一些用户而没有用户名和密码,他们希望他们使用名字,姓氏和第4项社交活动,要使这项工作有效,我们还有一个唯一的ID,该ID将在链接中提供(在极少数情况下,当2个人具有相同的信息时)

我们可以将其拆分为多个用户表,但是由于用户之间的联系非常紧密,因此需要对几乎整个应用程序进行重大修改

我们已经有了可以使用的方法,问题是它破坏了仍将使用用户名和密码的其他用户(包括管理员)的登录。

我们尝试的第一件事是尝试不成功地说服客户不要采用这种方法,但是他们很难做到。显然,我们已尝试进行路由,以便使用其他登录控制器,但没有运气,它始终默认为loginController。

标准登录控制器

<?php

namespace App\Http\Controllers\Auth\Standard;

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

class StandardLoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    protected function authenticated(Request $request, $user)
    {
        if ($user->user_type == 'Patient'){
            if ($user->current_facility_id != null){
                return redirect()->route('patient.dashboard');
            }
        }

        return redirect('/home');
    }

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    //protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

用于新登录方法的备用登录控制器

<?php

namespace App\Http\Controllers\Auth;

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

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    protected function authenticated(Request $request, $user)
    {
        if ($user->user_type == 'Patient'){
            if ($user->current_facility_id != null){
                return redirect()->route('patient.dashboard');
            }
        }

        return redirect('/home');
    }

    protected function validateLogin(Request $request)
    {
        $request->validate([
            'linkID' => 'required|string',
            'firstname' => 'required',
            'lastname' => 'required',
            'password' => 'required|string',
        ]);
    }/**/

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

    protected function credentials(Request $request)
    {
        return $request->only($this->username(), 'password', 'firstname', 'lastname');
    }
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    //protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

来自web.php的路由

Route::view('standard-login', 'auth.standard.login');
Route::post('standard-login', 'Auth\Standard\StandardLoginController@login');

另外一些来自用户模型的代码

public function getAuthPassword()
    {
        if($this->user_type == 'Patient')
        {
            return $this->last4ssn;
        }
        return $this->password;
    }

理想情况下,我们将有两个登录门户 1.将使用社交的名字,姓氏和姓氏4,以及一个唯一的ID作为隐藏的url参数(如果没有参数,则可以输入) 2.我们将使用用户名和密码进行标准登录

1 个答案:

答案 0 :(得分:0)

问题已解决,事实证明我没有更新登录表单上的操作,因此它引用了错误的登录控制器。

相关问题