public async Task <IActionResult> Callback(string code, string state = null) { IDeviantArtRefreshToken result = await DeviantArtAuth.GetTokenAsync(_appReg, code, new Uri($"https://{HttpContext.Request.Host}/Home/Callback")); var me = await DeviantArtFs.Api.User.AsyncWhoami(result, ObjectExpansion.None).StartAsTask(); var token = new Token { Id = Guid.NewGuid(), UserId = me.userid, AccessToken = result.AccessToken, RefreshToken = result.RefreshToken }; _context.Tokens.Add(token); await _context.SaveChangesAsync(); var claimsIdentity = new ClaimsIdentity( new[] { new Claim(ClaimTypes.Name, me.username), new Claim("token-id", token.Id.ToString()) }, CookieAuthenticationDefaults.AuthenticationScheme); await HttpContext.SignInAsync( CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity)); return(RedirectToAction("Index")); }
public async Task <IActionResult> Logout() { var t = await GetAccessTokenAsync(); if (t is TokenWrapper wrapper) { _context.Tokens.RemoveRange(_context.Tokens.Where(x => x.Id == wrapper.IdInDatabase)); await _context.SaveChangesAsync(); await HttpContext.SignOutAsync( CookieAuthenticationDefaults.AuthenticationScheme); await DeviantArtAuth.RevokeAsync(wrapper.RefreshToken, revoke_refresh_only : true); return(RedirectToAction("Index")); } else { return(Content($"The token returned by GetAccessTokenAsync() is not from the database")); } }