identity fixes
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
|
||||
namespace zero.Raven;
|
||||
|
||||
public static class IdentityBuilderExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Adds a RavenDb implementation of identity information stores.
|
||||
/// </summary>
|
||||
public static IdentityBuilder AddRavenDbStores(this IdentityBuilder builder)
|
||||
{
|
||||
Type userStoreType = typeof(RavenUserStore<,>).MakeGenericType(builder.UserType, builder.RoleType);
|
||||
Type roleStoreType = typeof(RavenRoleStore<>).MakeGenericType(builder.RoleType);
|
||||
|
||||
builder.Services.TryAddScoped(typeof(IUserStore<>).MakeGenericType(builder.UserType), userStoreType);
|
||||
builder.Services.TryAddScoped(typeof(IRoleStore<>).MakeGenericType(builder.RoleType), roleStoreType);
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
@@ -125,7 +125,7 @@ public partial class RavenUserStore<TUser> :
|
||||
return IdentityResult.Failed(new IdentityError
|
||||
{
|
||||
Code = "UserNotFound",
|
||||
Description = $"Could not find stored user with id {user.Id}."
|
||||
Description = $"Could not find stored user with id {user.Id}"
|
||||
});
|
||||
}
|
||||
|
||||
@@ -440,9 +440,13 @@ public partial class RavenUserStore<TUser> :
|
||||
/// <inheritdoc />
|
||||
public Task SetTokenAsync(TUser user, string loginProvider, string name, string value, CancellationToken cancellationToken)
|
||||
{
|
||||
UserToken token = user.Tokens.FirstOrDefault(x =>
|
||||
x.LoginProvider.Equals(loginProvider, _comparer) && x.Name.Equals(name, _comparer))
|
||||
?? new() { LoginProvider = loginProvider, Name = name };
|
||||
UserToken token = user.Tokens.FirstOrDefault(x => x.LoginProvider.Equals(loginProvider, _comparer) && x.Name.Equals(name, _comparer));
|
||||
|
||||
if (token == null)
|
||||
{
|
||||
token = new() { LoginProvider = loginProvider, Name = name };
|
||||
user.Tokens.Add(token);
|
||||
}
|
||||
|
||||
token.Value = value;
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ public partial class RavenOperations : IRavenOperations
|
||||
// check if the Id for a model already exists
|
||||
if (!model.Id.IsNullOrEmpty())
|
||||
{
|
||||
using (IZeroDocumentSession session = Store.Session(options: new Rv.Documents.Session.SessionOptions() { Database = Store.ResolvedDatabase, NoCaching = true }))
|
||||
using (IZeroDocumentSession session = Store.Session(options: new Rv.Documents.Session.SessionOptions() { NoCaching = true }))
|
||||
{
|
||||
previousModel = await session.LoadAsync<T>(model.Id);
|
||||
}
|
||||
|
||||
+13
-23
@@ -13,18 +13,7 @@ public class ZeroStore : IZeroStore
|
||||
|
||||
protected IZeroOptions Options { get; set; }
|
||||
protected Dictionary<string, IZeroDocumentSession> ScopedSessions { get; set; } = new();
|
||||
|
||||
/// <inheritdoc />
|
||||
string _resolvedDatabase = null;
|
||||
public string ResolvedDatabase
|
||||
{
|
||||
get => _resolvedDatabase;
|
||||
set
|
||||
{
|
||||
_resolvedDatabase = value;
|
||||
Raven.ResolvedDatabase = value;
|
||||
}
|
||||
}
|
||||
private const string NullDb = "__default__";
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -34,25 +23,31 @@ public class ZeroStore : IZeroStore
|
||||
/// <inheritdoc />
|
||||
public IZeroDocumentSession Session(string database = null, ZeroSessionResolution resolution = ZeroSessionResolution.Reuse, SessionOptions options = null)
|
||||
{
|
||||
database ??= ResolvedDatabase;
|
||||
options ??= new SessionOptions() { Database = database };
|
||||
string databaseKey = database ?? NullDb;
|
||||
|
||||
options ??= new SessionOptions();
|
||||
|
||||
if (database.HasValue())
|
||||
{
|
||||
options.Database = database;
|
||||
}
|
||||
|
||||
if (resolution == ZeroSessionResolution.Create)
|
||||
{
|
||||
return Raven.OpenAsyncSession(options) as IZeroDocumentSession;
|
||||
}
|
||||
|
||||
if (!ScopedSessions.TryGetValue(database, out IZeroDocumentSession session))
|
||||
if (!ScopedSessions.TryGetValue(databaseKey, out IZeroDocumentSession session))
|
||||
{
|
||||
session = Raven.OpenAsyncSession(options) as IZeroDocumentSession;
|
||||
ScopedSessions.TryAdd(database, session);
|
||||
ScopedSessions.TryAdd(databaseKey, session);
|
||||
}
|
||||
|
||||
if (session.IsDisposed)
|
||||
{
|
||||
session = Raven.OpenAsyncSession(options) as IZeroDocumentSession;
|
||||
ScopedSessions.Remove(database);
|
||||
ScopedSessions.TryAdd(database, session);
|
||||
ScopedSessions.Remove(databaseKey);
|
||||
ScopedSessions.TryAdd(databaseKey, session);
|
||||
}
|
||||
|
||||
return session;
|
||||
@@ -69,11 +64,6 @@ public enum ZeroSessionResolution
|
||||
|
||||
public interface IZeroStore
|
||||
{
|
||||
/// <summary>
|
||||
/// The database which has been resolved from the current application
|
||||
/// </summary>
|
||||
string ResolvedDatabase { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Get underlying raven document store
|
||||
/// </summary>
|
||||
|
||||
@@ -19,6 +19,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "legacy", "legacy", "{93A1CC
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "zero.Raven", "zero.Raven\zero.Raven.csproj", "{DC79D7EA-FAA1-4701-9C36-8295CD1C45D0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "zero.Raven.IdentityDemo", "..\playground\zero.Raven.IdentityDemo\zero.Raven.IdentityDemo.csproj", "{05C829D6-3052-40DB-9282-3BDFCDAE0F05}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -49,6 +51,10 @@ Global
|
||||
{DC79D7EA-FAA1-4701-9C36-8295CD1C45D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DC79D7EA-FAA1-4701-9C36-8295CD1C45D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DC79D7EA-FAA1-4701-9C36-8295CD1C45D0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{05C829D6-3052-40DB-9282-3BDFCDAE0F05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{05C829D6-3052-40DB-9282-3BDFCDAE0F05}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{05C829D6-3052-40DB-9282-3BDFCDAE0F05}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{05C829D6-3052-40DB-9282-3BDFCDAE0F05}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -29,7 +29,7 @@ public class ZeroEntity : ZeroIdEntity, ISupportsDbConventions, ISupportsRouting
|
||||
/// <summary>
|
||||
/// Whether the entity is visible in the frontend
|
||||
/// </summary>
|
||||
public bool IsActive { get; set; }
|
||||
public bool IsActive { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Unique hash for this entity (primarily used for routing)
|
||||
|
||||
Reference in New Issue
Block a user