1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Apex】別のユーザーでログインしたことを検知したい

Posted at

はじめに

この記事では、別のユーザーでログインしていることをApexで検知する方法に関して記載します。
以前の記事で、Experience Cloudにログインしているユーザーがユーザーとしてエクスペリエンスにログインでログインしているユーザーかどうかを見分ける方法を解説しましたが、ついでに書こうと思ったものになります。

前提の話

別ユーザでログインできる権限がある方に関しては、別ユーザーでログインしている場合、ページの上部に下記画像のようなものが表示されると思います。

image.png

その場合画面上はわかるけど内部的に判断して、処理を分けたりすることができるのかなーと思ったので記事としてまとめてみました。

本題

見分け方に関しては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 クラス

ユーザーセッション種別

本記事は以上となります。
ご覧いただきありがとうございました!

  1. IPアドレス

  2. IPアドレス

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?