Php Laravel手动认证
我在办公室里有一个本地服务器,它存储网络用户的所有Active Directory详细信息,例如用户名、电子邮件、电话号码、普通广告等 我有一个PHP脚本,它使用LDAP查询检索内部网络上当前登录用户的详细信息,从而允许当前登录用户访问这些详细信息 这还用于用用户预填充用户数据库 然后,我有一个Laravel应用程序,它将这些细节用作身份验证,绕过标准的登录屏幕 目前,我将用户发送到一个内部页面,在该页面中,他们按下一个按钮,将我使用LDAP检索到的所有信息发布到所述应用程序。当它到达应用程序时,我将这些详细信息存储在会话中,并以这种方式使用它们 我是否可以在Laravel的Auth中间件中使用这些凭据,以便用户被视为已登录 我不觉得把他们所有的数据塞进会话中真的有什么收获 我将Auth/LoginController更改为:Php Laravel手动认证,php,laravel,ldap,laravel-5.6,Php,Laravel,Ldap,Laravel 5.6,我在办公室里有一个本地服务器,它存储网络用户的所有Active Directory详细信息,例如用户名、电子邮件、电话号码、普通广告等 我有一个PHP脚本,它使用LDAP查询检索内部网络上当前登录用户的详细信息,从而允许当前登录用户访问这些详细信息 这还用于用用户预填充用户数据库 然后,我有一个Laravel应用程序,它将这些细节用作身份验证,绕过标准的登录屏幕 目前,我将用户发送到一个内部页面,在该页面中,他们按下一个按钮,将我使用LDAP检索到的所有信息发布到所述应用程序。当它到达应用程序时
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数据库中保留该用户的管理、报告等权限