小编Glo*_*ire的帖子

如何为路由组中的所有请求设置标头

我正在使用 Laravel 5.4 创建一个 API,并且一切正常。我使用了以下中间件 => auth:api 这样

Route::group(['middleware' => 'auth:api'], function(){ 
    Route::get('URIValue', ControllerName@action) //Example
});
Run Code Online (Sandbox Code Playgroud)

我已经用邮递员对其进行了测试,当请求标头包含以下键和值时,它运行良好:

  • 授权:Bearer api_token
  • 接受:应用程序/json

当 api_token 无效时,将执行 Handler 类的未经身份验证的函数。laravel 返回的默认响应是

'error' => 'Unauthenticated' // in JSON format
Run Code Online (Sandbox Code Playgroud)

但是当没有设置 Accept 头时,laravel 默认返回一个视图。但是对于 API,视图是不可接受的。

如何强制 laravel 为路由组中的路由的每个单个请求检查 Accept 标头是否设置了正确的值(在这种情况下,该值必须是 => accept/json)?

就像是:

protected function mapApiRoutes()
{
    Route::prefix('api')
          ->middleware('api')
          ->namespace($this->namespace)
          ->header('Accept' => 'application/json') //this
          ->group(base_path('routes/api.php'));
}
Run Code Online (Sandbox Code Playgroud)

或者

Route::group(['middleware'  => 'auth:api', 
              'headers'     => ['Accept' => 'application/json']
             ], function(){ 
                    Route::get('URIValue', ControllerName@action) //Example
             });
Run Code Online (Sandbox Code Playgroud)

php api json laravel-5 laravel-5.4

7
推荐指数
1
解决办法
1万
查看次数

输入的角材料垫芯片列表未显示验证错误

我目前面临带有和输入的mat-chip-list的奇怪问题。我有一个包含两个表单控件的表单组:联系人和姓名。

this.form = this.formBuilder.group({
    name: ['', [Validators.required]],
    contactIds: ['', [Validators.required]]
})
Run Code Online (Sandbox Code Playgroud)

该表单的视图如下所示:

<mat-form-field #contactsChipList>
    <mat-chip-list>
        <mat-chip *ngFor="let contact of contacts" [removable]="removable" (remove)="removeChipListItem(contact)">
            {{ contact.name | titlecase }} {{ contact.surname | titlecase }}
        <mat-icon matChipRemove *ngIf="removable"></mat-icon>
        </mat-chip>
        <input [matChipInputFor]="contactsChipList" placeholder="Contacts" formControlName="contactIds" />
        <mat-error *ngIf="form.hasError('required', 'contactIds')">This field is required</mat-error>
    </mat-chip-list>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

问题:当我从输入字段中删除所有元素时,父表单(formGroup)被标记为无效,但是formGroup的error属性不包含任何值。因此错误永远不会显示。

其他尝试:但是,当我使用普通的具有matInput属性但没有mat-chip-list的输入元素时,删除输入字段的内容时会正确显示错误。

在这种情况下,标记如下所示:

<div class="form-group">
    <mat-form-field>
        <input matInput placeholder="Contacts" formControlName="contactIds" />
        <mat-error *ngIf="form.hasError('required', 'contactIds')">This field is required</mat-error>
    </mat-form-field>
</div>
Run Code Online (Sandbox Code Playgroud)

假设:我现在认为问题出在mat-chip-list元素上。我试图研究: @Input()errorStateMatcher: ErrorStateMatcher 但是我不确定如何使用。Google对该搜索并不友好。

有没有人遇到过这个问题?如果您需要澄清,请告诉我。

typescript angular-material2 angular

7
推荐指数
1
解决办法
8948
查看次数

EF Core DatabaseGeneratedOption.Computed 不工作

我最近开始使用.NET CORE v2。我正在尝试通过在我的web-api模板中使用代码优先方法来设置我的数据库。

背景:我以前使用过 Laravel 框架,我想在迁移文件中复制 Laravel 的 timestamp() 函数,该函数基本上会在表中创建两列:UpdatedAt 和 CreatedAt。

当使用 INSERT 或 UPDATE 列的 ORM (Elqoquent) 函数时,这些列中的值会填充正确的值。它是无缝的,您无需担心。


在我的 c# 代码中,我有以下模型

public class A {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime Created_At { get; set; } = DateTime.UtcNow;

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime Updated_At { get; set; }

    // I've tried to add "= DateTime.UtcNow;" at the end of Updated_At as well
} …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-core .net-core

5
推荐指数
1
解决办法
2272
查看次数

Laravel Sanctum auth:sanctum 中间件与 Angular SPA 未经身份验证的响应

我有一个具有以下设置的应用程序:

Laravel

主机:appname.local:8000

环境变量:

  • SESSION_DRIVER=数据库
  • SESSION_LIFETIME=480
  • SESSION_CONNECTION=mysql
  • SESSION_DOMAIN=.appname.local
  • SESSION_SECURE_COOKIE=假
  • SESSION_COOKIE=appnameapi_session
  • SANCTUM_STATEFUL_DOMAINS='.appname.local,localhost,127.0.0.1'

角

主机:appname.local:4200

目前有效的方法:

  • 我可以调用 Sanctum 的 csrf-cookie 端点,它在我的浏览器中设置 CSRF 令牌。
  • 然后我可以调用我的 API 的登录端点来使用 Auth::attempt() 来验证我的 Laravel 应用程序中的用户。这会在会话表中创建一个新条目,如下所示

获取令牌和验证用户的角度方法 获取令牌和登录的角度方法

认证成功后的会话数据库条目 认证成功后的会话数据库条目

什么不起作用:

对受以下中间件保护的路由的后续请求:auth:sanctum都会导致未经身份验证的响应。HTTP 请求永远不会到达我的控制器。

auth:sanctum 保护路由 auth:sanctum 保护路由

但是我可以在开发人员的控制台中看到正在发送 cookie。所以我不明白为什么 Sanctum 不接受认证 在此处输入图片说明

我已经学习了几个教程,但我似乎无法理解为什么 Laravel 的 Authenticate 中间件无法看到我已经对我的用户进行了身份验证。

有谁知道我可能做错了什么?

php laravel angular laravel-sanctum

4
推荐指数
1
解决办法
9091
查看次数

如何引用存储在MySQL表目录中的图像?

我有一组png图像(16x16)存储在我的Web服务器上的文件夹中.路径:c:/ wamp/www/website/images/flags.这些图像代表了世界各国的不同旗帜.

当我通过PHP脚本输出国家/地区列表及其各自的标志时,我希望动态访问这些图像.

在我的数据库中,我创建了下表

CREATE TABLE country (
  ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
  countryCode CHAR(2) NOT NULL, 
  countryName VARCHAR (50) NOT NULL,
  phoneCode CHAR (3) NOT NULL, 
  imagePathName VARCHAR (254) NOT NULL,
  PRIMARY KEY(ID)
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,图像引用如何工作?我是否像任何CSS或HTML一样存储路径?

我是否必须存储路径,我只需按以下格式添加它:

INSERT INTO country VALUES ('', 'CD', 
'Democratic Republic of Congo, '243',   'c:/wamp/www/website/images/flags/cd.png')
Run Code Online (Sandbox Code Playgroud)

或者我必须有一个BLOB数据类型的列.应该是这样的情况INSERT语句将如何?

mysql sql database

0
推荐指数
1
解决办法
4664
查看次数