我正在使用 DotNetOpenAuth 通过 FB 和 Google 登录用户。
当用户访问网站时,有没有办法检测到他/她已经登录 FB 或 Google 并自动登录?
谢谢
我正在使用 DotNetOpenAuth 通过 FB 和 Google 登录用户。
当用户访问网站时,有没有办法检测到他/她已经登录 FB 或 Google 并自动登录?
谢谢
可以,如果您的用户之前已经使用 Google 或 Facebook 明确登录过您的网站。出于隐私原因,两家提供商都不允许您在每个用户至少一次明确登录您的网站的情况下隐式登录他们的用户(并在登录页面上单击“记住我”)。
一旦用户批准了它,它就成为可能,但仍然不是很简单。该方法涉及在您的页面上创建一个隐藏的 iframe(也许在首次创建用户会话时,您将 iframe 添加到用户正在查看的任何页面,或者只是您的热门登录页面)。此 iframe 指向您网站上的 URL,该 URL 除了启动无用户交互登录流程外什么都不做。对于 Google,这意味着您的服务器OpenIdRelyingParty.CreateRequest
使用 Google OP 标识符进行调用,并且您IAuthenticationRequest.Mode = AuthenticationRequestMode.Immediate
在调用IAuthenticationRequest.RedirectToProvider
. 这Immediate
bit 告诉提供者不要期望与用户交互(因为您的 iframe 是不可见的)并且立即给出是或否响应。然后在重定向回您的网站(仍然在隐藏的 iframe 中)时,您会看到用户已登录 Google(或未登录)并获取他们声明的标识符并将他们登录到您的网站。
对于使用 OAuth 2 旧草案的 Facebook,该过程可能类似,但使用 OAuth 2 类。我还没有做过这个,所以我不能真正给出一个概述。