如何在Azure App Service部署的Laravel应用中获取已认证用户的邮箱ID?
在Azure App Service的Laravel应用中获取Azure AD登录用户的邮箱和用户名
因为你已经完成Azure AD认证配置且应用运行正常,以下是两种直接获取用户邮箱和用户名的方式:
方法1:通过Laravel Auth facade获取
如果你的Laravel应用是通过Socialite或Azure AD官方集成包实现的认证,登录后Auth::user()会返回包含Azure AD用户信息的实例,直接提取对应字段即可:
// 获取登录用户实例 $user = Auth::user(); // 提取邮箱ID $userEmail = $user->email; // 提取仅名称(按需选择) // 仅名(given_name) $userName = $user->given_name; // 全名(名+姓) $fullName = $user->given_name . ' ' . $user->family_name;
注意:
要确保Azure AD应用注册中已配置User.Read权限,并且在ID令牌中包含email、given_name、family_name这些Claims——可在应用注册的「令牌配置」页面添加可选Claims来确保这些字段被返回。
方法2:直接读取Azure App Service注入的请求头
Azure App Service的Easy Auth会将用户认证信息注入请求头,你可以直接读取头部信息获取数据:
// 从请求头直接获取邮箱 $userEmail = request()->header('X-MS-CLIENT-PRINCIPAL-NAME'); // 解析完整的用户Claims JSON $principalJson = request()->header('X-MS-CLIENT-PRINCIPAL'); $principalData = json_decode($principalJson, true); // 遍历Claims提取用户名(given_name) $userName = ''; foreach ($principalData['claims'] as $claim) { if ($claim['typ'] === 'given_name') { $userName = $claim['val']; break; } }
展示与记录操作示例
拿到信息后,可直接用于页面展示或操作日志记录:
// 示例:写入操作日志 \Log::info('用户完成文件上传操作', [ 'user_email' => $userEmail, 'user_name' => $userName, 'action_time' => now()->toDateTimeString() ]); // 示例:传递到视图展示 return view('dashboard', [ 'userEmail' => $userEmail, 'userName' => $userName ]);
内容的提问来源于stack exchange,提问作者Harpreet Singh
相关产品推荐
相关产品推荐

