当前位置: 首页 > 知识库问答 >
问题:

为什么AuthHttp(angular2-jwt)不能被注入组件中?

钮誉
2023-03-14

这些变化中最显著的是:

  • 将angular npm包从“~4.0.0”更新到“~4.2.0”
  • 将tsconfig.json中的模块从“system”更改为“commonjs”

我不明白这是如何改变事情的,但它起作用了!

import { AuthConfig, AuthHttp } from 'angular2-jwt';
import { NgModule } from '@angular/core';
import { HttpModule, Http, RequestOptions } from '@angular/http';
import { BrowserModule } from '@angular/platform-browser';

import { AppRoutingModule, routingComponents } from './app.routing';

import { AppComponent } from './Components/app.component';

@NgModule({
    imports: [BrowserModule, HttpModule, AppRoutingModule],
    declarations: [AppComponent, routingComponents],
    bootstrap: [AppComponent],
    providers: [
        {
            provide: AuthHttp,
            useFactory: (http: Http, options: RequestOptions) => new AuthHttp(new AuthConfig(), http, options),
            deps: [Http, RequestOptions]
        }]
})
export class AppModule { }
import { Component } from '@angular/core';
import { AuthHttp } from 'angular2-jwt';

@Component({
    selector: "app",
    templateUrl: "/App/Components/app.component.html"
})
export class AppComponent
{
    constructor(service: AuthHttp)
    { }
}

我发现这个资源说我需要阅读更多关于DI的信息,但从我的角度来看一切都很好。https://github.com/auth0/angular2-jwt/issues/88

如果将AppComponent构造函数更改为调用new AuthConfig(),它将在transpiled js文件中生成new Angular2_jwt_1.AuthConfig()(此错误说明构造函数不存在)。但是,如果在js文件中手动将其更改为new Angular2_jwt_1.default.authconfig(),则会正确创建实例。这可能与病因有关吗?

共有1个答案

贺桐
2023-03-14

我找不到出现这个问题的确切原因,但很可能是基于配置的。我所做的工作是不使用angular2-jwt库,而是将承载令牌手动添加到本angular2 jwt身份验证文章的请求库中。

以下是如何获得承载令牌。

public Login(username: string, password: string): Observable<boolean>
{
    // Prepare post headers
    var headers: Headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');

    // Prepare credential request
    var body: string = "grant_type=password&scope=scopes go here&username=" + username + "&password=" + password;

    return this.http
        .post("token url here", body, { headers: headers })
        .map((response: Response) =>
        {
            let token = response.json();
            token = token && token.access_token;
            if (!token)
                return false;
            else
            {
                localStorage.setItem('username', username);
                localStorage.setItem('token', token);
                return true;
            }
        });
}

以下是如何发出经过身份验证的请求(Token属性从localStorage获取当前令牌)。

public Post<T>(url: string, body: string): Observable<T>
{
    let headers = new Headers({ 'Authorization': 'Bearer ' + this.Token });
    let options = new RequestOptions({ headers: headers });

    return this.http
        .post(url, body)
        .map((response: Response) => response.json());
}
 类似资料:
  • 问题内容: 我有一个通用的抽象模板类。我以为如果创建特定于类型的生产者,则可以直接在通用类中注入一些DAO服务。但是我不能。 为什么?我该如何解决? 当我注入一个例如它完美地工作。但是没有泛型… 问题答案: 当您要求 容器知道您要一个类型为的bean 。如果存在这样的bean并且其类型信息已知,则容器可以满足注入。例如,类型信息保留在带注释的方法中 容器使用反射来检索该参数化的类型,并将其与请求的

  • 问题内容: 为什么只有知道文件的inode却不搜索链接到该inode的文件却无法访问文件?到文件的硬链接只包含名称和数字,告诉您在哪里可以找到有关该文件的所有 真实 信息的索引节点。当我被告知没有用户模式直接使用inode编号打开文件时,我感到很惊讶。 对于系统而言,这似乎是一种无害且有用的功能。为什么不提供? 问题答案: 某些操作系统 确实 具有该功能。例如,OS X需要它来支持Carbon F

  • 问题内容: 我有 一切都正确加载。 然后在我的JavaScript中,我尝试注入ngCookies: 但是它似乎找不到$ cookies: 问题答案: 我不确定您的功能用例是什么,但是您不能在配置块中注入服务(即服务)。仅常量和提供程序可以注入配置块内。 您可以将服务注入运行块,但我不知道这是否对您有帮助,因为我不确定您打算如何处理这些cookie。 顺便说一句:您似乎在混合主角度文件和模块的版本

  • @auth0/angular-jwt NOTE: This library is now at version 5 and is published on npm as @auth0/angular-jwt. If you're looking for the pre-v1.0 version of this library, it can be found in the pre-v1.0 bra

  • 我一直在使用令牌进行身份验证。然而,我不明白令牌(JWT)与cookie有何不同。两者都将存储用户信息(作为令牌中的声明),定义持久性,并将与每个客户端请求一起发送到服务器。 除了上面提到的几个问题- 谢谢