Starts in:
1 DAY
15 HRS
29 MIN
42 SEC
Starts in:
1 D
15 H
29 M
42 S
Open Closed

Bugs & Problems v3.1.X #282


User avatar
0
maliming created
Support Team Fullstack Developer

Update the ABP CLI:

dotnet tool update -g Volo.Abp.Cli

Update the ABP Suite:

abp suite update or dotnet tool update -g Volo.Abp.Suite

  • Release notes https://docs.abp.io/en/commercial/latest/release-notes

105 Answer(s)
  • User Avatar
    0
    edelivery created

    Hi armanozak I refer to the extensions documentation updated for v3. But I think IdentityConfigModule.forRoot() call to IdentityModule not IdentityExtendModule so it had error My app-routing.module:

  • User Avatar
    0
    armanozak created

    Hi edelivery,

    The route should either load IdentityModule directly and call its static forLazy method or should load your custom module (i.e. IdentityExtendModule) and which calls IdentityModule.forChild in its imports metadata.

  • User Avatar
    0
    edelivery created

    Hi armanozak Can you please make an example for load my custom module with IdentityModule?

  • User Avatar
    0
    armanozak created
    @NgModule({
      imports: [
        // other imports...
    
        IdentityModule.forChild({
          entityActionContributors: identityEntityActionContributors,
        }),
      ],
    })
    export class IdentityExtendModule { }
    
  • User Avatar
    0
    edelivery created

    It's work fine thanks armanozak

  • User Avatar
    0
    alper created
    Support Team Director

    @ninomartini , thanks for reporting the issue. it has been fixed and the new preview version will release tomorrow.

  • User Avatar
    0
    DanielAndreasen created

    Hello!

    I have noticed that logs of user logouts in the abpscuritylogs table sometimes doesn't register which user actually logged out. I would like to use this information of which user logged out of the system, so its important that the value is never null.

    Project is using abp 3.1.0

  • User Avatar
    0
    alper created
    Support Team Director

    hi DanielAndreasen,

    I see that Logout action called when there's no logged in user. this will happen in 2 ways,

    • the user might click the logout twice (browser sends both actions and the second one will be without UserId)
    • or the user clicks the Logout link from a bookmark or copy-paste the logout URL to the browser.
  • User Avatar
    0
    DanielAndreasen created

    Hello @alper,

    In the example I included in my previous post, it was neither of the 2 scenarios you described that resulted in "userid" and "UserName" getting a Null value in my database table. The issue seems to occur randomly in a session where I repeatedly login/logout (for the purpose of testing).

    I also find it it problematic that a UserId might not be logged if the user accidently presses the logout button twice. Is this intentional?

  • User Avatar
    0
    alper created
    Support Team Director

    @Daniel, I created a new topic for this, can you write your finding under this topic, https://support.abp.io/QA/Questions/434/UserId-and-Username-is-null-in-Logout-action

  • User Avatar
    0
    murat.kebabci created

    Hi, I am updating 3.0.5 to 3.1.2, But Login button of home page not work. I can't login. Is there any config I don't know? And then I have created a empty project. The problem continues.

    "@volo/abp.ng.account": "~3.1.2",
    "@volo/abp.ng.audit-logging": "~3.1.2",
    "@volo/abp.ng.identity": "~3.1.2",
    "@volo/abp.ng.identity-server": "~3.1.2",
    "@volo/abp.ng.language-management": "~3.1.2",
    "@volo/abp.ng.saas": "~3.1.2",
    "@volo/abp.ng.text-template-management": "~3.1.2",
    "@volo/abp.ng.theme.lepton": "~3.1.2",
    

    This code is not redirect and not push login page!

    login() {
        this.authService.initLogin();
      }
    

    I wrote account/login a[href] tag on home page, but not work!

    This is my env.

    import { Config } from '@abp/ng.core';
    
    const baseUrl = 'http://localhost:4200';
    
    export const environment = {
      production: false,
      application: {
        baseUrl,
        name: 'XXX',
      },
      oAuthConfig: {
        issuer: 'http://localhost:5002',
        redirectUri: baseUrl,
        clientId: 'XXX_App',
        responseType: 'code',
        scope: 'offline_access XXX',
      },
      apis: {
        default: {
          url: 'http://localhost:5001',
          rootNamespace: 'XXX',
        },
      },
    } as Config.Environment;
    
    
  • User Avatar
    0
    Mehmet created

    Hi @murat.kebabci

    Unfortunately, the authorization code flow does not work with a backend that running on HTTP. You should run your backend on HTTPS URL or change the oAuthConfig for resource owner password flow.

    oAuthConfig for resource owner password flow:

      oAuthConfig: {
        issuer: 'http://localhost:5002',
        clientId: 'XXX_App',
        dummyClientSecret: '1q2w3e*',
        scope: 'XXX',
        oidc: false,
        requireHttps: false,
      },
    

    See that question related to this: https://support.abp.io/QA/Questions/411/how-to-config-oAuthConfig-in-angular

  • User Avatar
    0
    scott7106 created

    I have customized the tenant property of the saas module, adding several properties.

    In ZiplineModuleExtensionConfigurator, I added the following:

    tenant.AddOrUpdateProperty<ServerType>(
                "ServerType",
                property =>
                {
                    property.Attributes.Add(new RequiredAttribute());
                    property.DisplayName = LocalizableString.Create<ZiplineResource>("ServerType");
                });
    

    In ZiplineEfCoreEntityExtensionMappings, I added the following:

    ObjectExtensionManager.Instance.MapEfCoreProperty<Tenant, ServerType>("ServerType");
    

    The drop down list shows up correctly. However, when I attempt to save the tenant (either on New or Edit), I get an invalid cast exception.

    The stack trace is provided below: 2020-09-21 18:06:06.905 -04:00 [ERR] Invalid cast from 'System.Int64' to 'OtisEd.Zipline.Environments.EnvironmentType'. System.InvalidCastException: Invalid cast from 'System.Int64' to 'OtisEd.Zipline.Environments.EnvironmentType'. at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider) at System.Int64.System.IConvertible.ToType(Type type, IFormatProvider provider) at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at Volo.Abp.EntityFrameworkCore.AbpDbContext1.HandleExtraPropertiesOnSave(EntityEntry entry) at Volo.Abp.EntityFrameworkCore.AbpDbContext1.ApplyAbpConcepts(EntityEntry entry, EntityChangeReport changeReport) at Volo.Abp.EntityFrameworkCore.AbpDbContext1.ApplyAbpConcepts() at Volo.Abp.EntityFrameworkCore.AbpDbContext1.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) at Volo.Abp.Uow.UnitOfWork.SaveChangesAsync(CancellationToken cancellationToken) at Volo.Saas.Host.TenantAppService.CreateAsync(SaasTenantCreateDto input) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at lambda_method(Closure , Object ) at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult() at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.

  • User Avatar
    0
    DanielAndreasen created

    Exposed Plaintext passwords in GUI and Database

    Setting a new password from the web GUI (in Administration --> Identity management --> Users) will log the password in plain text.

    After setting the new password for a user, I am able to see it in the details of an audit log:

    This log will of course also be present in the corresponding database table:

    I consider this a critical security flaw - user passwords should never be stored as plaintext even if it is just in a log.

    <br>


    ABP Framework version: v3.1.0 UI type: Angular Tiered (MVC) or Identity Server Seperated (Angular): No

  • User Avatar
    0
    DanielAndreasen created

    When adding a new sub unit to a organization tree, an error will occur that prevents the action from succeeding: Adding a new root unit to the organization tree will solve the issue momentarily until a user has re-entered the "Organization unit" page.


    ABP Framework version: v3.1.0 UI type: Angular Browser: Chrome Tiered (MVC) or Identity Server Seperated (Angular): No

  • User Avatar
    0
    Mehmet created

    Hi @DanielAndreasen

    This problem has been resolved with v3.2-rc.2.

  • User Avatar
    0
    DanielAndreasen created

    When selecting multiple datepicker input in a CRUD-page the previously selected datepicker window is not closed which results in multiple windows overlapping eachother:

    This issue also occurs when selecting multiple datepicker input fields on the window that is presented when creating new entities in the standard CRUD-pages:

    Additionally, there is no obvious way for the user to navigate between months or years in the datepicker.

  • User Avatar
    0
    alper created
    Support Team Director

    @DanielAndreasen is it v3.1? (v3.3 will release tomorrow) is it Angular?

  • User Avatar
    0
    DanielAndreasen created

    @alper Yes we are still running v3.1 with plans to upgrade to v3.3 when it releases, however I was not able find anyone mentioning this issue in any thread or as part of the release notes so I wanted to know if it has been resolved.

    Fronted is Angular.

  • User Avatar
    0
    bunyamin created

    Hello @DanielAndreasen,

    Could you share your template with me or an example repo? So, I can reproduce the problem.

  • User Avatar
    0
    joe@tronactive.com created

    Hello, I have a background hangfire Job that checks a directory and if there is a specific file in that directory it sets a bool in the DB. My issue is, I though the UniteOfWork.SaveChangesAsync would commit the transaction after each save so that it didn't lock the DB. But it is not working and still locks the DB. This job itterates large numbers of files, like around 500,000 or so. so it takes a very long time to run. What am I doing wrong? I tried COmpleteAsync but that threw a Object not set to an instance exception. I am not entirely sure what CompleteAsync does as I did not find much documentation on it.

    Thank you for any help

  • User Avatar
    0
    alper created
    Support Team Director

    joe@tronactive.com can you create a new topic. this doesn't seem lke a bug. and many people are registed to this topic and gets unrelated email notifications.

  • User Avatar
    0
    Esben_Dalgaard created

    Hi, It seems like there is a problem with getting the 'modal' function in navigation to work on 3.1.0. We tried upgrading it to 3.3.0, and update all we could, but when we want to use the window we get this: Admittedly, it's not being use the normal way, but it doesn't work if we try to generate a class with no editing to the class. However in a vanilla 3.3.0 projet, with just two entitites, one navigating to the other, it works perfect. Is there a length property somewhere that's missing?

  • User Avatar
    0
    Mehmet created

    Hi @Esben_Dalgaard

    What code is causing this error? Can you share HTML and TypeScript code with us?

    Can you run the following command in the angular folder and share the result?

    yarn why @ng-bootstrap/ng-bootstrap
    
  • User Avatar
    0
    Esben_Dalgaard created

    [1/4] Why do we have the module "@ng-bootstrap/ng-bootstrap"...? [2/4] Initialising dependency graph... warning @volo/abp.ng.identity > @abp/ng.components > ng-zorro-antd@9.3.0: please warning @angular-devkit/build-angular > webpack-dev-server > chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies. warning @angular-devkit/build-angular > webpack-dev-server > chokidar > fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. warning @angular-devkit/build-angular > webpack > watchpack > watchpack-chokidar2 > chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies. warning @angular-devkit/build-angular > resolve-url-loader > rework > css > urix@0.1.0: Please see https://github.com/lydell/urix#deprecated warning @angular-devkit/build-angular > resolve-url-loader > rework > css > source-map-resolve > urix@0.1.0: Please see https://github.com/lydell/urix#deprecated warning @angular-devkit/build-angular > resolve-url-loader > rework > css > source-map-resolve > resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated warning @angular/cli > universal-analytics > request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 warning @angular/cli > universal-analytics > request > har-validator@5.1.5: this library is no longer supported warning protractor > webdriver-manager > request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 warning tslint@6.1.3: TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information. [3/4] Finding dependency... [4/4] Calculating file sizes... => Found "@ng-bootstrap/ng-bootstrap@7.0.0" info Reasons this module exists

    • "@volo#abp.ng.account#@abp#ng.theme.shared" depends on it
    • Hoisted from "@volo#abp.ng.account#@abp#ng.theme.shared#@ng-bootstrap#ng-bootstrap" info Disk size without dependencies: "6.93MB" info Disk size with unique dependencies: "7MB" info Disk size with transitive dependencies: "7MB" info Number of shared dependencies: 1 Done in 19.60s.

    Html:

      <div class="col-auto">
        <h1 class="content-header-title">{{ '::TerminalCommands' | abpLocalization}}</h1>
      </div>
      <div class="col-lg-auto pl-lg-0">
        <abp-breadcrumb></abp-breadcrumb>
      </div>
      <div class="col">
        <div class="text-lg-right pt-2">
          <button
            *abpPermission="'Stella.TerminalCommands.Create'"
            class="btn btn-primary btn-sm"
            type="button"
            (click)="create()"
          >
            <i class="fa fa-plus mr-1"></i>
            {{ '::NewTerminalCommand' | abpLocalization }}
          </button>
        </div>
      </div>
    </div>
    
    <div class="card">
      <div class="card-body">
        <div class="col-12 col-sm-auto">
            <div class="form-group">
                <label>
                  {{ '::ProductInstance' | abpLocalization }}
                </label>
                <abp-lookup-input
                  [getFn]="terminalCommandsService.productInstanceLookup"
                  [ngModelOptions]="{ standalone: true }" 
                  displayNameProp="stellaId"
                  lookupNameProp="displayName"
                  [(ngModel)]="filters.productInstanceId"
                ></abp-lookup-input>
              </div>
        </div>
    
        <ngx-datatable [rows]="data.items" [count]="data.totalCount" [list]="list" default>
    
          <ngx-datatable-column name="{{ '::IsIncoming' | abpLocalization }}" prop="terminalCommand.isIncoming">
            <ng-template let-row="row" ngx-datatable-cell-template>
              <ng-template [ngIf]="row.terminalCommand?.isIncoming" [ngIfThen]="yes" [ngIfElse]="no"></ng-template>
    
              <ng-template #yes>
                <div class="text-center text-success">
                  <i [title]="'AbpUi::Yes' | abpLocalization" class="fa fa-check"></i>
                </div>
              </ng-template>
    
              <ng-template #no>
                <div class="text-center text-danger">
                  <i [title]="'AbpUi::No' | abpLocalization" class="fa fa-times"></i>
                </div>
              </ng-template>
            </ng-template>
          </ngx-datatable-column>
          <ngx-datatable-column name="{{ '::Source' | abpLocalization }}" prop="terminalCommand.source">
            <ng-template let-row="row" ngx-datatable-cell-template>
              {{ '::Enum:TerminalMessageType:' + row.terminalCommand?.source | abpLocalization }}
            </ng-template>
          </ngx-datatable-column>
          <ngx-datatable-column name="{{ '::Status' | abpLocalization }}" prop="terminalCommand.status">
            <ng-template let-row="row" ngx-datatable-cell-template>
              {{ '::Enum:TerminalMessageStatus:' + row.terminalCommand?.status | abpLocalization }}
            </ng-template>
          </ngx-datatable-column>
          <ngx-datatable-column name="{{ '::ErrorMessage' | abpLocalization }}" prop="terminalCommand.errorMessage">
            <ng-template let-row="row" ngx-datatable-cell-template>
              {{ row.terminalCommand?.errorMessage }}
            </ng-template>
          </ngx-datatable-column>
          <ngx-datatable-column name="{{ '::CommandText' | abpLocalization }}" prop="terminalCommand.commandText">
            <ng-template let-row="row" ngx-datatable-cell-template>
              {{ row.terminalCommand?.commandText }}
            </ng-template>
          </ngx-datatable-column>
    
          <ngx-datatable-column name="{{ '::ProductInstance' | abpLocalization }}" prop="productInstance.stellaId">
            <ng-template let-row="row" ngx-datatable-cell-template>
              {{ row.productInstance?.stellaId }}
            </ng-template>
          </ngx-datatable-column>
    
        </ngx-datatable>
      </div>
    </div>
    
    <abp-modal [busy]="isModalBusy" [(visible)]="isModalOpen">
      <ng-template #abpHeader>
        <h3>{{ (selected?.terminalCommand.id ? 'AbpUi::Edit' : '::NewTerminalCommand') | abpLocalization }}</h3>
      </ng-template>
    
      <ng-template #abpBody>
        <form [formGroup]="form" (ngSubmit)="submitForm()" validateOnSubmit>
          <div class="mt-2 fade-in-top">
    	  
            <div class="form-group">
              <label for="terminalCommand-source">
                {{ '::Source' | abpLocalization }}
              </label>
    
              <select
                id="terminalCommand-source"
                formControlName="source"
                class="custom-select form-control"
              >
                
                <option *ngFor="let x of terminalMessageTypeArr; trackBy: track.by('key')" [ngValue]="x.key">
                  {{ '::Enum:TerminalMessageType:' + x.key  | abpLocalization }}
                </option>
              </select>
            </div>
    
            <div class="form-group">
              <label for="terminalCommand-commandText">
                {{ '::CommandText' | abpLocalization }}
              </label>
    
              <input
                type="text" 
                id="terminalCommand-commandText" 
                formControlName="commandText"
                class="form-control"/>
            </div>
            <div class="form-group">
              <label for="ProductInstance-StellaId">
                {{ '::ProductInstance' | abpLocalization }}
              </label>
    
              <abp-lookup-input
                [getFn]="terminalCommandsService.productInstanceLookup"
                [editingData]="selected.productInstance"
                displayNameProp="stellaId"
                lookupNameProp="displayName"
                formControlName="productInstanceId">
               </abp-lookup-input>
            </div>
          </div>
        </form>
      </ng-template>
    
      <ng-template #abpFooter>
        <button type="button" class="btn btn-secondary" #abpClose>
          {{ 'AbpUi::Cancel' | abpLocalization }}
        </button>
        
        <abp-button
          iconClass="fa fa-check"
          (click)="submitForm()"
          [disabled]="form?.invalid"
        >
          {{ 'AbpUi::Save' | abpLocalization }}
        </abp-button>
      </ng-template>
    </abp-modal>
    

Made with ❤️ on ABP v9.1.0-preview. Updated on November 20, 2024, 13:06