Express服务器无法接收由Angular HttpClient发送的身份验证标头

时间:2019-06-04 13:45:40

标签: angular express http authentication jwt

我正在创建一个应用程序,用户可以在其中登录并查看其个人资料。为此,我在服务器上设置了enpdpoint:

<FlatList
  style={{
    flex: 1
  }}
  contentContainerStyle={{
    paddingTop: 40
  }}
  data={this.props.produk}
  renderItem={({ item }) => (
    <View key={item.id}>
      <Image
        resizeMode="cover"
        source={{ uri: item.thumb }}
        style={styles.fotoProduk}
      />
    </View>
  )}
  keyExtractor={(item, index) => index}
/>

如果标头中包含身份验证令牌,则router.get('/profile', passport.authenticate('jwt', {session:false}), async(req, res) => { console.log(req.headers) try { let users = await usersDB.getAll(); res.json({ users: users, user: req.user }); } catch (err) { console.log(err); } }); 行应对用户进行身份验证。 但就我尝试记录标题而言,它们没有这样的字段。 所以在登录按钮提交时,我会执行以下操作:

passport.authenticate('jwt', {session:false})

然后看一下getProfile():

 public onLoginSubmit(): void {
    const user = {
      email : this.email,
      password : this.password
    }
    this.authService.authenticateUser(user).subscribe((data: any)=>{
      if(data.success){//here need to check response for success
        this.authService.storeUserData(data);
        this.router.navigate(['/user']);
      }else{
        this.router.navigate(['/login']);
      }
    });
 }

好吧,在发送请求时,我得到了 getProfile(){ let headers = new HttpHeaders(); this.loadToken(); headers.set('Content-Type', 'application/x-www-form-urlencoded').set('Authorization', this.authToken); return this.http.get(`${this.url}profile/`, {headers:headers}) .pipe(map(res => res)) } 但是对于邮递员来说,一切都很好。这是邮递员的代码:

401 Unauthorized

1 个答案:

答案 0 :(得分:1)

HttpHeaders是不可变的,所以只需尝试(我想您不需要设置application / x-www-form-urlencoded)

     getProfile(){
      let headers = new HttpHeaders({
'Authorization' : this.authToken
});
      this.loadToken();
      return this.http.get(`${this.url}profile/`, {headers:headers})
      .pipe(map(res => res))
    }

如果您的身份验证是Bearer,则需要“授权”:'Bearer'+'this.authToken'