我如何使用SAML协议中的RelayState在IdP启动的SSO中指定SP上的登录页面?
我已经在IdP和SP之间设置了由IdP启动的SSO过程。它可以工作,但可以到达root_path。我需要它登陆RelayState URL。
我正在使用装置。在我的控制器下面找到:
def saml
student = Student.where(email: request.env["omniauth.auth"]['uid'].to_s).first
if student
sign_in_and_redirect student, event: :authentication
else
flash[:error] = t 'flash_msg.access_1'
redirect_to root_path
end
end
答案是仅替换sign_in_and_redirect method by sign_in method
。然后通过执行redirect_to params[:RelayState]
将用户重定向到RelayState URL。最终的saml方法是:
def saml
student = Student.where(email: request.env["omniauth.auth"]['uid'].to_s).first
if student
sign_in student, event: :authentication
redirect_to params[:RelayState]
else
flash[:error] = t 'flash_msg.access_1'
redirect_to root_path
end
end
我希望它可以帮助某人!