Php Laravel手动认证

Php Laravel手动认证,php,laravel,ldap,laravel-5.6,Php,Laravel,Ldap,Laravel 5.6,我在办公室里有一个本地服务器,它存储网络用户的所有Active Directory详细信息,例如用户名、电子邮件、电话号码、普通广告等 我有一个PHP脚本,它使用LDAP查询检索内部网络上当前登录用户的详细信息,从而允许当前登录用户访问这些详细信息 这还用于用用户预填充用户数据库 然后,我有一个Laravel应用程序,它将这些细节用作身份验证,绕过标准的登录屏幕 目前,我将用户发送到一个内部页面,在该页面中,他们按下一个按钮,将我使用LDAP检索到的所有信息发布到所述应用程序。当它到达应用程序时

我在办公室里有一个本地服务器,它存储网络用户的所有Active Directory详细信息,例如用户名、电子邮件、电话号码、普通广告等

我有一个PHP脚本,它使用LDAP查询检索内部网络上当前登录用户的详细信息,从而允许当前登录用户访问这些详细信息

这还用于用用户预填充用户数据库

然后,我有一个Laravel应用程序,它将这些细节用作身份验证,绕过标准的登录屏幕

目前,我将用户发送到一个内部页面,在该页面中,他们按下一个按钮,将我使用LDAP检索到的所有信息发布到所述应用程序。当它到达应用程序时,我将这些详细信息存储在会话中,并以这种方式使用它们

我是否可以在Laravel的Auth中间件中使用这些凭据,以便用户被视为已登录

我不觉得把他们所有的数据塞进会话中真的有什么收获

我将Auth/LoginController更改为:

public function authenticate(Request $request)
    {
        // The email retrieved from the POST request
        $emailAddress = $request->get('EM');
        // Try to get this user from the User table
        $currentUser = User::where('email', $emailAddress)->get()->first();

        // If the query returned something
        if ($currentUser != null)
        {
            // Login this user
            Auth::login($currentUser);

            if($currentUser = Auth::check())
            {  
                $request->session()->put('User_name', $request->get('UN'));
                $request->session()->put('Container_name', $request->get('CN'));
                $request->session()->put('Display_name', $request->get('DN'));
                $request->session()->put('Job_Title', $request->get('JT'));
                $request->session()->put('Department', $request->get('DP'));
                $request->session()->put('Office', $request->get('OF'));
                $request->session()->put('Email', $request->get('EM'));
                $request->session()->put('Phone', $request->get('DD'));
                $request->session()->put('Mobile', $request->get('MO'));
                $request->session()->put('Manager_User_name', $request->get('MUN'));
                $request->session()->put('Manager_Container_name', $request->get('MCN'));

                return view('pages.index');
        }
        else
        {
            echo "We don't know you";
            echo $user;

            var_dump(Auth::login($user));
        }
    }
}
基本上,我根据给定的数据检查用户数据库,然后手动登录用户。此时,我将它们的数据存储在会话中

如果数据不在用户数据库中,我想添加它们

这是控制器任务还是中间件任务

更新:

我没有使用中间件,而是使用以下代码:

public function checkUserExists(Request $request)
    {
        $email = $request->get('EM');
        $user = User::where('email', $emailAddress)->get()->first();

        if($user->isEmpty())
        {
            // If this user was not found
            $user = User::create(
                [
                    'username' => $request->get('UN'),
                    'displayName' => $request->get('DN'),
                    'email' => $request->get('EM'),
                    'role' => $request->get('JT'),
                    'department' => $request->get('DP'),
                    'location' => $request->get('OF'),
                    'directDialIn' => $request->get('DDI'),
                    'mobileNumber' => $request->get('MO'),
                    'managedByUsername' => $request->get('MUN'),
                    'managedByDisplayName' => $request->get('MCN')
                ]
            )
        }
        else
        {
            // If this user was found update their details
            $user->update(
               [
                'username' => $request->get('UN'),
                'displayName' => $request->get('DN'),
                'email' => $request->get('EM'),
                'role' => $request->get('JT'),
                'department' => $request->get('DP'),
                'location' => $request->get('OF'),
                'directDialIn' => $request->get('DDI'),
                'mobileNumber' => $request->get('MO'),
                'managedByUsername' => $request->get('MUN'),
                'managedByDisplayName' => $request->get('MCN')
               ]
            );

            $request->session()->put('Container_name', $request->get('CN'));
            $request->session()->put('Display_name', $request->get('DN'));
            $request->session()->put('Job_Title', $request->get('JT'));
            $request->session()->put('Department', $request->get('DP'));
            $request->session()->put('Office', $request->get('OF'));
            $request->session()->put('Email', $request->get('EM'));
            $request->session()->put('Phone', $request->get('DD'));
            $request->session()->put('Mobile', $request->get('MO'));
            $request->session()->put('Manager_User_name', $request->get('MUN'));
            $request->session()->put('Manager_Container_name', $request->get('MCN'));

            // Login this user
            Auth::login($user);

            if($user = Auth::check())
            {
                return view('pages.index');
            }
        }
    }

我修改了AuthController以从Active Directory获得身份验证,如果通过,我将其与Laravel DB中的用户记录匹配,并手动登录用户:

Auth::loginUsingId($user->id);
我在Laravel数据库中保留该用户的管理、报告等权限