ログイン後、サービスポータルにリダイレクトしたい

a_129
Mega Guru

adminを持っていないユーザーに対して、ログインを行った後にサービスポータルに遷移させたいです。
製品ドキュメントを参考にsys_properties テーブルにプロパティを追加。

その後、スクリプトインクルード(SPEntryPage)を以下のように修正しました。

 

 

getFirstPageURL: function() {
		var session = gs.getSession();
		this.logProperties('before', session);

		// has roles and is not a Service Portal page - go to UI16
		var nt = session.getProperty("nav_to");
		var isServicePortalURL = new GlideSPScriptable().isServicePortalURL(nt);
		var redirectURL = session.getProperty("login_redirect");

		if (user.hasRoles("admin") && !redirectURL && !isServicePortalURL)
			return;

		// user may have logged in from a frame, the /login_redirect.do page will bust out of it
		if (!redirectURL) {
			// redirectURL is nav_to 
			// if nav_to == "welcome.do" then use starting_page
			var sPage = session.getProperty("starting_page");
			if (sPage && nt == "welcome.do")
				nt = sPage;
			
			// Avoid a redirect loop to the home page
			var ep = gs.getProperty("glide.login.home");
			if (nt) {
				if (ep == nt)
					nt = null;
			}
			 // PRB726860: if page is still welcome.do, go to glide.login.home preserving frameset
			if (nt == "welcome.do") {
				session.putProperty("nav_to", ep);
				return;
			}
			
			session.putProperty("login_redirect", nt || "true");
			return "/login_redirect.do?sysparm_stack=no";
		}

		session.clearProperty("login_redirect");
		session.clearProperty("nav_to");
		var returnUrl = this.portal;
		if (redirectURL && redirectURL != "true") {
			var spUrl = new GlideSPScriptable().mapUrlToSPUrl(redirectURL);
			returnUrl = spUrl ? this.portal + "?" + spUrl : redirectURL;
		}

		this.logProperties('after', session);
		if (!this.logVariables) {
			gs.log('redirectURL: ' + redirectURL);
			gs.log('User: ' + user.getName());
			gs.log('is internal: ' + (!user.hasRoles()));
			gs.log('returnUrl: ' + returnUrl);
		}

		return returnUrl;
	},

	logProperties: function(beforeOrAfter, session) {
		if (!this.logVariables)
			return; 
		
		gs.log('SPEntryPage: Redirect ------------------------------- ' + beforeOrAfter);
		gs.log('session.starting_page: ' + session.getProperty("starting_page"));
		gs.log('session.nav_to: ' + session.getProperty("nav_to"));
		gs.log('session.login_redirect: ' + session.getProperty("login_redirect"));
		gs.log('gs.fURI: ' + session.getURI());
	},
	
	type: 'SPEntryPage'
};

 

 

しかし、adminを持っていないユーザーで再ログインしたところ、UI16(開発者画面)に遷移してしまいました。

解決方法をご存知の方いらっしゃいましたら教えていただけると幸いです。

分かりにくくすみません。


◆参考にした製品ドキュメント

シングル サインオン、ログイン、および URL リダイレクト (servicenow.com)

1 件の受理された解決策

返信いただきありがとうございます。
if (user.hasRole() && !redirectURL &&& !isServicePortalURL)と修正することで私の考えていた動きをしてくれました!
ありがとうございました。
◆参考サイト
https://qiita.com/htshozawa/items/f76615b1acaad3d5c68b

元の投稿で解決策を見る

2件の返信2

Ikeda1
Mega Guru

こんにちは。

日本語で参考になる記事がありましたので共有します。
https://qiita.com/okamit/items/d61584cb56c46385bf6c
この文中に以下のように記載されています。

 

(2-3) 69-70行目あたりを編集し、本スクリプトを適用 させない ユーザーの条件を指定します
※デフォルトではログイン試行ユーザーがロールを持っている場合に適用 させない 設定になっています
getFirstPageURL: function() {
......
if (user.hasRoles() && !redirectURL && !isServicePortalURL) //<- ココ
return;
......
user.hasroles()はユーザーがロールを持っていないと言う指定になりますので、作成された構文を以下のように指定すればいいと思います。

 

if (!user.hasRoles("admin") && !redirectURL && !isServicePortalURL) //<- ココ
return;

返信いただきありがとうございます。
if (user.hasRole() && !redirectURL &&& !isServicePortalURL)と修正することで私の考えていた動きをしてくれました!
ありがとうございました。
◆参考サイト
https://qiita.com/htshozawa/items/f76615b1acaad3d5c68b