Esempio n. 1
0
        public async Task <RequestResult> GetAuthToken([FromBody] FirebaseClientData user)
        {
            FirebaseContactInfo contactInfo = await FirebaseAuth.GetAccountInfo(user.accessToken);

            if (contactInfo != null)
            {
                var currentFirebaseUser = contactInfo.users.FirstOrDefault(u => u.email == user.email);
                var ownUser             = await this.usersService.GetByEmail(user.email);

                if (ownUser != null)
                {
                    //TODO refresh(store new) firebase access token?
                    return(AuthenticateUser(ownUser));
                }
                else
                {
                    var newUser = await this.usersService.Add(new User()
                    {
                        Name          = currentFirebaseUser.displayName != null ? currentFirebaseUser.displayName : currentFirebaseUser.email,
                        Email         = currentFirebaseUser.email,
                        PhotoUrl      = currentFirebaseUser.photoUrl,
                        Username      = currentFirebaseUser.displayName != null ? currentFirebaseUser.displayName : currentFirebaseUser.email, //TODO ensure username is unique
                        FirebaseToken = user.accessToken,
                        FirebaseInfo  = currentFirebaseUser
                    });

                    return(AuthenticateUser(newUser));
                }
            }

            return(new RequestResult
            {
                State = RequestState.Failed,
                Message = "Invalid User"
            });
        }