ServiceStack:在使用Google进行身份验证时从身份验证会话中获取电子邮件

时间:2013-04-22 16:13:01

标签: servicestack

我通过GoogleOpenIdOAuthProvider验证用户身份。我需要访问登录用户的电子邮件地址。我试图按原样实施Using Typed Sessions in ServiceStack代码。

所以,我创建了一个我的服务继承自的基类:

public abstract class AppServiceBase : Service
{
    //private CustomUserSession userSession;
    protected CustomUserSession UserSession
    {
        get
        {
            return base.SessionAs<CustomUserSession>();
        }
    }
}

public class CustomUserSession : AuthUserSession
{
    public string CustomId { get; set; }
}

该服务具有[Authenticate]属性。在我的AppHost设置中,我已经像这样配置了auth:

        Plugins.Add(new AuthFeature(() => new CustomUserSession(),
            new IAuthProvider[] {
            new GoogleOpenIdOAuthProvider(appSettings)    //Sign-in with Google OpenId
        }));

用户进行身份验证后,服务会尝试从基类访问auth会话,如下所示:

var x = base.UserSession.Email;

但是,电子邮件始终为null。如何访问此值?

1 个答案:

答案 0 :(得分:3)

您需要从AuthProvider中提取数据并在CustomUserSession中设置值。 SocialBootstrapApi示例

中显示了一个示例

https://github.com/ServiceStack/SocialBootstrapApi/blob/master/src/SocialBootstrapApi/Models/CustomUserSession.cs#L50

覆盖OnAuthenticated,找到GoogleOpenIdOAuthProvider以转到电子邮件地址。

另一个例子显示在ServiceStack OAuth - registration instead login