Integrated AuthenticationStateProvider using .NET Core Identity
This commit is contained in:
@ -2,6 +2,8 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Oqtane.Repository;
|
||||
using Oqtane.Models;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Oqtane.Controllers
|
||||
{
|
||||
@ -9,10 +11,14 @@ namespace Oqtane.Controllers
|
||||
public class UserController : Controller
|
||||
{
|
||||
private readonly IUserRepository users;
|
||||
private readonly UserManager<IdentityUser> identityUserManager;
|
||||
private readonly SignInManager<IdentityUser> identitySignInManager;
|
||||
|
||||
public UserController(IUserRepository Users)
|
||||
public UserController(IUserRepository Users, UserManager<IdentityUser> IdentityUserManager, SignInManager<IdentityUser> IdentitySignInManager)
|
||||
{
|
||||
users = Users;
|
||||
identityUserManager = IdentityUserManager;
|
||||
identitySignInManager = IdentitySignInManager;
|
||||
}
|
||||
|
||||
// GET: api/<controller>
|
||||
@ -31,10 +37,23 @@ namespace Oqtane.Controllers
|
||||
|
||||
// POST api/<controller>
|
||||
[HttpPost]
|
||||
public void Post([FromBody] User user)
|
||||
public async Task Post([FromBody] User user)
|
||||
{
|
||||
if (ModelState.IsValid)
|
||||
users.AddUser(user);
|
||||
{
|
||||
IdentityUser identityuser = await identityUserManager.FindByNameAsync(user.Username);
|
||||
if (identityuser == null)
|
||||
{
|
||||
identityuser = new IdentityUser();
|
||||
identityuser.UserName = user.Username;
|
||||
identityuser.Email = user.Username;
|
||||
var result = await identityUserManager.CreateAsync(identityuser, user.Password);
|
||||
if (result.Succeeded)
|
||||
{
|
||||
users.AddUser(user);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PUT api/<controller>/5
|
||||
@ -42,7 +61,9 @@ namespace Oqtane.Controllers
|
||||
public void Put(int id, [FromBody] User user)
|
||||
{
|
||||
if (ModelState.IsValid)
|
||||
{
|
||||
users.UpdateUser(user);
|
||||
}
|
||||
}
|
||||
|
||||
// DELETE api/<controller>/5
|
||||
@ -51,5 +72,72 @@ namespace Oqtane.Controllers
|
||||
{
|
||||
users.DeleteUser(id);
|
||||
}
|
||||
|
||||
// GET api/<controller>/current
|
||||
[HttpGet("current")]
|
||||
public User Current()
|
||||
{
|
||||
User user = null;
|
||||
if (User.Identity.IsAuthenticated)
|
||||
{
|
||||
user = users.GetUser(User.Identity.Name);
|
||||
user.IsAuthenticated = true;
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
// POST api/<controller>/login
|
||||
[HttpPost("login")]
|
||||
public async Task<User> Login([FromBody] User user)
|
||||
{
|
||||
if (ModelState.IsValid)
|
||||
{
|
||||
// seed host user - this logic should be moved to installation
|
||||
IdentityUser identityuser = await identityUserManager.FindByNameAsync("host");
|
||||
if (identityuser == null)
|
||||
{
|
||||
var result = await identityUserManager.CreateAsync(new IdentityUser { UserName = "host", Email = "host" }, "password");
|
||||
if (result.Succeeded)
|
||||
{
|
||||
users.AddUser(new Models.User { Username = "host", DisplayName = "host", IsSuperUser = true, Roles = "" });
|
||||
}
|
||||
}
|
||||
|
||||
identityuser = await identityUserManager.FindByNameAsync(user.Username);
|
||||
if (identityuser != null)
|
||||
{
|
||||
var result = await identitySignInManager.CheckPasswordSignInAsync(identityuser, user.Password, false);
|
||||
if (result.Succeeded)
|
||||
{
|
||||
await identitySignInManager.SignInAsync(identityuser, false);
|
||||
user = users.GetUser(identityuser.UserName);
|
||||
user.IsAuthenticated = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
user = null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
user = null;
|
||||
}
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
// POST api/<controller>/logout
|
||||
[HttpPost("logout")]
|
||||
public async Task Logout([FromBody] User user)
|
||||
{
|
||||
await identitySignInManager.SignOutAsync();
|
||||
}
|
||||
|
||||
// GET api/<controller>/current
|
||||
[HttpGet("authenticate")]
|
||||
public User Authenticate()
|
||||
{
|
||||
return new User { Username = User.Identity.Name, IsAuthenticated = User.Identity.IsAuthenticated };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user