我希望自定义 IdentityServer 4 并使用自定义页面进行登录/注册/丢失密码等......(仅供参考,我使用 Blazor,但它应该是相同的!)。
示例 通过示例,我现在使用以下代码:
Challenge(authProps, "oidc");
但它重定向到预定义的登录页面,我该如何更改?
资料 我搜索了一些资料,看到有些人用下面的
.UserInteraction.LoginUrl = "http://..../MyLoginPage";
我的问题是我使用 abp.io,他们提供了一个 IdentityServer,但我无法访问AddIdentityServer代码,它在某处被硬编码,我无法访问它 (AbpIdentityServerDomainModule.cs)!
所以,我正在寻找一种重新定义登录页面的方法!
我正在尝试使用 abp.framework(版本 3)为实体框架数据库播种和 AppUser。我知道如何使用 IdentityUserManager 播种 IdentityUser,但找不到任何有关如何播种扩展 abpUser (如 appUser)的实体的文档。我在播种时设置密码(用于演示数据目的)。
我们收到以下错误,该错误似乎仅在将日期时间添加到值对象时才会发生。'实体类型'TimeWindow'无法配置为拥有的,因为它已被配置为非拥有的。如果您想覆盖以前的配置,请首先通过调用“忽略”从模型中删除实体类型。
值对象类:
public class TimeWindow : ValueObject
{
public DateTime? StartTime { get; set; }
public DateTime? EndTime { get; set; }
private TimeWindow()
{
}
public TimeWindow(
DateTime? startTime,
DateTime? endTime)
{
StartTime = startTime;
EndTime = endTime;
}
protected override IEnumerable<object> GetAtomicValues()
{
yield return StartTime;
yield return EndTime;
}
}
Run Code Online (Sandbox Code Playgroud)
在 OnModelCreating 内部,我们添加了 OwnsOne 关系:
builder.Entity<Manifest>(b =>
{
b.ToTable(DistributionConsts.DbTablePrefix + "Manifests", DistributionConsts.DbSchema);
b.ConfigureByConvention();
b.OwnsOne(b => b.TimeWindow);
});
Run Code Online (Sandbox Code Playgroud)
我们将 TimeWindow 值对象添加到的实体:
public class Manifest : FullAuditedAggregateRoot<Guid>
{
protected …
Run Code Online (Sandbox Code Playgroud) 在我的公司,我们使用全新的 Abp 框架 ( abp.io )。由于它是一个新框架,因此缺少大量文档,因此我们必须搜索源代码。看了这么多代码,我意识到这是他们正在使用的一种模式,它总是出现Providers、ProvidersManagement、DefinitionProvider 等等。我想知道这个模式是否有名字或者它只是在那里使用的东西。我不相信这是第二种选择,但我不知道。
功能模块、设置模块、权限模块都是使用这种设计模式实现的模块。
谢谢你们!
abp new TodoApp
,创建一个新的 ABP 解决方案。TodoApp.DbMigrator
项目,以创建完整的数据库。TodoApp.Web
项目。/wwwroot/libs/
文件夹是空的。原始异常详细信息:
Volo.Abp.AbpException: Could not find the bundle file '/libs/abp/core/abp.css' for the bundle 'LeptonXLite.Global'!
at Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers.AbpTagHelperResourceService.ProcessAsync(ViewContext viewContext, TagHelper tagHelper, TagHelperContext context, TagHelperOutput output, List`1 bundleItems, String bundleName)
at Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers.AbpBundleTagHelperService`2.ProcessAsync(TagHelperContext context, TagHelperOutput output)
at Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.<RunAsync>g__Awaited|0_0(Task task, TagHelperExecutionContext executionContext, Int32 i, Int32 count)
at AspNetCoreGeneratedDocument.Themes_LeptonXLite_Layouts_Application.<>c__DisplayClass17_0.<<ExecuteAsync>b__0>d.MoveNext()
--- End …
Run Code Online (Sandbox Code Playgroud) 我已经将ABP框架部署在Kubernetes集群中。
存在以下部署:
因此,AuthServer、HttpApi.Host 正在侦听端口 80 / http,而 nginx 正在侦听 https。配置/Helm 值如下:
use-forwarded-headers: "true"
use-proxy-protocol: "true"
use-gzip: "true"
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,部署后我可以进入 Swagger 并授权:
通过检查 AuthServer 日志可以确认这一点:
[19:12:39 INF] CORS policy execution successful.
[19:12:39 INF] The request URI matched a server endpoint: Token.
[19:12:39 INF] The token request was successfully extracted: {
"grant_type": "authorization_code",
"code": "[redacted]",
"client_id": "foobar_Swagger",
"redirect_uri": "https://api.staging.foobar.io/swagger/oauth2-redirect.html"
}.
[19:12:39 INF] The token request was successfully validated.
Run Code Online (Sandbox Code Playgroud)
但是,现在我想使用 Swagger 来确保与端点的连接正常工作,因此我尝试第一个 GET 端点:
如您所见,有 500 …
我使用 aspnetboilerplate (MVC) 并希望实现忘记密码功能,以允许用户使用登录屏幕上的链接重置自己的密码。
我想这是通过生成密码重置代码然后通过电子邮件发送给用户来工作的。用户点击链接并被带到允许他们重置密码的屏幕。
我停留在初始阶段。在注意到尝试登录时返回了用户对象后,我从登录操作的副本开始。从这里我尝试设置密码重置代码。
[HttpPost]
[UnitOfWork]
public virtual async Task<JsonResult> ForgotPassword(ForgotPasswordViewModel forgotPasswordModel, string returnUrl = "", string returnUrlHash = "")
{
returnUrl = NormalizeReturnUrl(returnUrl);
if (!string.IsNullOrWhiteSpace(returnUrlHash))
{
returnUrl = returnUrl + returnUrlHash;
}
var loginResult = await _logInManager.LoginAsync(forgotPasswordModel.UsernameOrEmailAddress, "ForgotPassword", GetTenancyNameOrNull());
loginResult.User.SetNewPasswordResetCode();
switch (loginResult.Result)
{
case AbpLoginResultType.Success:
return Json(loginResult);
default:
throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(loginResult.Result, forgotPasswordModel.UsernameOrEmailAddress, GetTenancyNameOrNull());
}
}
Run Code Online (Sandbox Code Playgroud)
之后检查 AbpUser 表
loginResult.User.SetNewPasswordResetCode();
我看不到用户的任何密码重置代码,它们都是空的。
有人可以指出我正确的方向。
提前致谢
感谢下面的回答是正确的,只是为了完成下面的工作。显然忽略最后的json返回
public virtual async Task ForgotPassword(ForgotPasswordViewModel forgotPasswordModel, string returnUrl = "", string returnUrlHash = "") { …
我想关闭我的 ABP 项目中特定应用程序服务的自动 WebAPI 生成服务。
我最近偶然发现 ABP(以前称为 Asp.Net BoilerPlate)作为以模块化方式重建 Web 应用程序的框架。它确实非常有趣,并且附带了许多非常疯狂的基本元素,例如身份验证、日志记录、安全性、多租户、设置等等......
但是,据我目前的理解,ABP 与 EF Core 或 Dapper 是“强耦合”的,而且我不喜欢在代码中使用 ORM,我有一种更“数据库驱动”的方法并且喜欢编写询问我自己。
所以,主要问题是:可以在不使用 EFCore/Dapper 的情况下使用 ABP 吗?或者最好切换到其他模块化框架,例如OrchardCore或ExtCore?
编辑:2020 年 11 月 11 日@hikalkan 回复后。
嗨@hikalkan,感谢您的友好回复。也许我必须更多地解释我想要实现的目标,以便您可以更好地为我提供建议。我的目标是创建一个“可插入”网络应用程序,在其中我可以将一个模块替换为具有相同功能但细节不同的另一个模块。
一点介绍:我有一个针对中小型公司人力资源部门的“复杂”网络应用程序,许多客户都使用它,并且每个客户都在其场所安装了自己的副本。该应用程序由许多功能组成:个人数据、合同数据、培训数据、轮班等。但每个客户的模块都略有不同,而应用程序本身是一个旧的、单一的应用程序:它可以工作,但我必须维护不同的版本,几乎每个客户都有一个版本,非常困难且耗时。不要怪我,我已经“继承”了这个应用程序,并且必须以这种方式维护和改进它。
但是,最后,我可以花一些时间从头开始重建它,我希望它是“模块化的”,以便主要部分(身份验证、分析、数据库交互、主题、安全性、日志记录等)保持稳定& 可靠,在所有安装之间共享,每个客户都可以选择模块/插件。有点像 Wordpress,但更好。
例如,假设我有一个简单的模块“contactSimple”用于管理联系人(电子邮件、电话号码、寻呼机等),每个联系人在数据库中都有一个类型和一个值字段,非常基本,并且我的 90%客户对此感到满意。但剩下的 10% 希望添加注释字段、“是主要联系人”标志或其他细微更改。现在,我想做的是:开发“contactEnhanced”模块作为一个单独的类库,与“contactSimple”具有相同的界面和主要功能,将其编译为dll,只需更改web应用程序中的dll,更新如果需要的话,数据库,重新加载应用程序并发生新的 dll,而无需更改任何其他组件。
我本来想简单地使用动态反射来获取它,但后来我发现反射不太适合,因为速度慢且占用资源大,所以在上网时我找到了ABP。
现在,问题是:在您看来,ABP 是我正在寻找的框架/解决方案吗?请告诉我!
我正在尝试利用书籍和作者 abp 教程来构建示例应用程序。
在我的示例应用程序中,我有网站(而不是书籍)和警报(而不是作者)。
一切似乎都是对的。但是,一旦我加载 /alerts 页面,我就会收到以下错误。
寻找如何解决的方向......
我最接近的是这个链接:Abp.io 异常:激活 Castle.Proxies.ProcessesServiceProxy 时抛出异常
但是,我不确定该用户到底做了什么来解决他们的问题。
[14:56:47 INF] Authorization was successful.
[14:56:47 INF] Executing endpoint 'MyApp.Alerts.AlertAppService.GetListAsync (MyApp.Application)'
[14:56:47 INF] Route matched with {action = "GetList", controller = "Alert", area = "", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.Abp.Application.Dtos.PagedResultDto`1[MyApp.Alerts.AlertDto]] GetListAsync(Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto) on controller MyApp.Alerts.AlertAppService (MyApp.Application).
[14:56:47 ERR] ---------- RemoteServiceErrorInfo ----------
{
"code": null,
"message": "An internal error occurred during your request!",
"details": null,
"data": {
"ActivatorChain": "Castle.Proxies.AlertAppServiceProxy"
},
"validationErrors": null
}
[14:56:47 …
Run Code Online (Sandbox Code Playgroud) abp ×10
asp.net-core ×3
asp.net ×2
.net ×1
blazor ×1
c# ×1
kubernetes ×1
openiddict ×1
orchardcore ×1
orm ×1
webapi ×1