接入自己平台用户数据,在登陆的时候根据指定域名的cookie登陆。
从自己平台获取用户基础数据。检测是否已经导入Spacebuilder,没有导入,则导入。
然后获取对应的Spacebuilder的用户信息,然后调用Spacebuilder.Common.FormsAuthenticationService.SignIn(IUser user, bool rememberPassword)方法。
调用完了之后HttpContext.Current.User.Identity 不是 FormsIdentity类型的(也就是Spacebuilder.Common.FormsAuthenticationService.GetAuthenticatedUser()方法返回的用户一直null)。
这就一直在这循环了,一遍遍调用SignIn 一遍遍 检测“获取当前认证用户”。
求解,为什么我调用Spacebuilder.Common.FormsAuthenticationService.SignIn(IUser user, bool rememberPassword)之后,获取当前认证用户信息(GetAuthenticatedUser())一直为null?
……………………………………………………………………………………………………
第二次编辑:
我该说些什么好?
FormsAuthenticationService.SignIn(IUser user, bool rememberPassword)方法触发的
EventBus<User>.Instance().OnAfter(user_object, new CommonEventArgs(EventOperationType.Instance().SignIn()));事件
会再次调用UserContext.CurrentUser。
我自己平台的账号就是通过获取UserContext.CurrentUser属性的时候,检测我平台的cookie获取用户id,然后获取(第一次登陆则先导入Spacebuilder再获取)用户信息,获取成功之后我这里会调用SignIn方法。这就是一直循环了。。
CODE:
//用户上下文 public class UserContext { //获取当前用户 public CurrentUser{ get{ /*近乎 原来的获取方法*/ /*这里我先用 变量存储获取到的用户, 若没有获取到,则从当前请求中获取我自己平台的cookie 这个时候 若是第一次来Spacebuilder 则先导入。 然后获取用户信息,获取成功之后 调用 FormsAuthenticationService.SignIn方法 */ } } /* ……其他代码 */ }
public class FormsAuthenticationService:IAuthenticationService { /// <summary> /// 登录 /// </summary> /// <param name="user">登录的用户</param> /// <param name="rememberPassword">是否记住密码</param> public void SignIn(IUser user, bool rememberPassword){ FormsAuthentication.SetAuthCookie(user.UserName, rememberPassword); IUser _signedInUser = GetAuthenticatedUser(); User user_object = user as User; if (user_object != null) EventBus<User>.Instance().OnAfter(user_object, new CommonEventArgs(EventOperationType.Instance().SignIn())); /*这个方法实现比较简单,应该很明白,就是EventBus<User>.Instance().OnAfter(……)触发的登陆后事件 再次调用了上面的从用户上下文获取当前用户 死循环就来了……*/ } }