接入自己平台用户数据,在登陆的时候根据指定域名的cookie登陆…… 悬赏:0

接入自己平台用户数据,在登陆的时候根据指定域名的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(……)触发的登陆后事件
			再次调用了上面的从用户上下文获取当前用户
			死循环就来了……*/
	}
}

 

  • wangxk
  • 近乎_问阳
  • 2014-01-23 11:58 发布

http://www.jinhusns.com/Developers

您可以参考我们的开发文档,或购买我们二次开发培训视频