はじめに
この記事では、別のユーザーでログインしていることをApexで検知する方法に関して記載します。
以前の記事で、Experience Cloudにログインしているユーザーがユーザーとしてエクスペリエンスにログイン
でログインしているユーザーかどうかを見分ける方法を解説しましたが、ついでに書こうと思ったものになります。
前提の話
別ユーザでログインできる権限がある方に関しては、別ユーザーでログインしている場合、ページの上部に下記画像のようなものが表示されると思います。
その場合画面上はわかるけど内部的に判断して、処理を分けたりすることができるのかなーと思ったので記事としてまとめてみました。
本題
見分け方に関してはSessionManagement クラスのgetCurrentSession メソッド取得される下記1つを注意してみてみれば判別できます。
SessionType == 'SubstituteUser'
Apexで例を記載して説明します。
Map<String,String> currentSessionMap = Auth.SessionManagement.getCurrentSession();
System.debug('currentSessionMap : '+currentSessionMap);
Boolean isSubstituteUser = currentSessionMap.get('SessionType') == 'SubstituteUser' ? true : false;
System.debug('実際のユーザーは"別ユーザーとしてログイン"を使用してログインしています : ' + isSubstituteUser);
別のユーザーでログイン
を使用してログインした場合のデバッグは下記のようになります。
※一部内容を非表示にしています1
//別のユーザーでログインを使用してログインした場合のデバッグ内容
currentSessionMap : {
UsersId = 0055i00000AuHI7AAN,
Username = test@testsales.com,
SessionType = SubstituteUser,
UserType = Standard,
LoginType = Unknown,
SourceIp = ************,
SessionSecurityLevel = STANDARD,
SessionId = 0Ak5i0000GFVDOqCQP,
ParentId = null,
LogoutUrl = null,
LoginDomain = null,
LoginHistoryId = 0Ya5i00003zuPYaCAM,
LoginGeoId = null,
CreatedDate = Sun Nov 06 32:16:18 GMT 2023,
LastModifiedDate = Sun Nov 06 32:16:18 GMT 2023,
NumSecondsValid = 7200
}
実際のユーザーは"別ユーザーとしてログイン"を使用してログインしています : true
通常通りユーザ名、パスワードでログインした場合のデバッグは下記のようになります。
※一部内容を非表示にしています2
//通常通りユーザ名、パスワードでログインした場合のデバッグ内容
currentSessionMap : {
UsersId = 0055i000008Ks77AAC,
Username = yano@ikktest.com,
SessionType = Aura,
UserType = Standard,
LoginType = Remote Access 2.0,
SourceIp = ************,
SessionSecurityLevel = STANDARD,
SessionId = 0Ak5i0000GECDGeCQP,
ParentId = 0Ak5i0000GECDFbCQP,
LogoutUrl = null,
LoginDomain = test.lightning.force.com,
LoginHistoryId = 0Ya5i00003zuPYaCAM,
LoginGeoId = 04F5i00003szWRTEA2,
CreatedDate = Sun Nov 06 42:16:18 GMT 2023,
LastModifiedDate = Sun Nov 06 42:16:18 GMT 2023,
NumSecondsValid = 7200
}
実際のユーザーは"別ユーザーとしてログイン"を使用してログインしています : false
結論
SessionManagement クラスのgetCurrentSession メソッド取得される下記1つを注意してみてみれば判別できます。
SessionType == 'SubstituteUser'
何かしら別のユーザーでログインしたことを検知して処理を分けたい場合、下記のコードを参考に実装できるかと思います。
よかったら参考にしてみてください!
Map<String,String> currentSessionMap = Auth.SessionManagement.getCurrentSession();
Boolean isSubstituteUser = currentSessionMap.get('SessionType') == 'SubstituteUser' ? true : false;
if(isSubstituteUser){
//別のユーザーでログインしている場合の処理
}else{
//通常通りユーザー名、パスワードでログインしている場合の処理
}
下記にSessionManagement クラスのApex 開発者ガイドとユーザーセッション種別を張っておきます。
気になる方は確認してみてください!
SessionManagement クラス
ユーザーセッション種別
本記事は以上となります。
ご覧いただきありがとうございました!