4

I am authenticating users via GoogleOpenIdOAuthProvider. I need to access the email address of the user that logged in. I have attempted to implement the Using Typed Sessions in ServiceStack code as-is.

So, I created a base class that my service inherits from:

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; }
}

The service has the [Authenticate] attribute on it. In my AppHost setup, I have configured auth like this:

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

Once the user has authenticated, the service tries to access the auth session from the base class like this:

var x = base.UserSession.Email;

However, Email is always null. How can I access this value?

D'Arcy Rittich
  • 167,292
  • 40
  • 290
  • 283

1 Answers1

3

You will need to pull the data from the AuthProvider and set the value in the CustomUserSession. An example of this is shown in the SocialBootstrapApi sample

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

Override OnAuthenticated, find the GoogleOpenIdOAuthProvider to get to the email address.

Another example is shown at ServiceStack OAuth - registration instead login

Community
  • 1
  • 1
jeffgabhart
  • 1,117
  • 7
  • 13
  • At first, it wasn't clear why this wasn't already done for me, until I realized you could be simultaneously authenticated with multiple providers. – D'Arcy Rittich Apr 23 '13 at 20:47