Loopback 4 身份验证登录控制器问题

pra*_*wal 3 loopback4

我正在尝试向我的应用程序添加身份验证。有两种模型,分别称为用户和用户凭证。用户拥有一个用户凭证。

对用户的发布请求工作正常。密码存储在用户凭证模型(散列)中,其他字段存储在用户模型中。

但是当我发出登录请求时,我收到以下错误

POST /users/login 中未处理的错误:500 TypeError:this.userRepository.findCredentials 不是 MyUserService.verifyCredentials 中的函数(D:\ionic-pr\loopback-projects\no\node_modules@loopback\authentication-jwt\src\services \user.service.ts:38:56) 在 process._tickCallback (内部/process/next_tick.js:68:7)

节点模块中的authentication-jwt内的用户服务抛出错误。

我不明白出了什么问题。

先感谢您

编辑: 现在我已经制作了两个控制器。第一个使发布请求工作正常。第二个执行登录如下

进口-

import {TokenService} from '@loopback/authentication';
import {Credentials, MyUserService, TokenServiceBindings, UserRepository, UserServiceBindings} from "@loopback/authentication-jwt";
import {inject} from '@loopback/core';
import {repository} from '@loopback/repository';
import {post, requestBody} from '@loopback/rest';
import {SecurityBindings, UserProfile} from '@loopback/security';
Run Code Online (Sandbox Code Playgroud)

构造函数 -

constructor(
    @inject(TokenServiceBindings.TOKEN_SERVICE)
    public jwtService: TokenService,
    @inject(UserServiceBindings.USER_SERVICE)
    public userService: MyUserService,
    @inject(SecurityBindings.USER, {optional: true})
    public user: UserProfile,
    @repository(UserRepository) protected userRepository: UserRepository,
  )
Run Code Online (Sandbox Code Playgroud)

Mad*_*aky 5

正如您所说,您正在使用 @loopback/authentication-jwt

import {User} from '../models';
import {UserRepository} from '../repositories';
Run Code Online (Sandbox Code Playgroud)

从上面看来,您似乎已经创建了自己的用户存储库。您没有使用扩展中的默认扩展,这会引发错误。上面的导入应该是这样的

import {
  Credentials,
  MyUserService,
  TokenServiceBindings,
  User,
  UserRepository,
  UserServiceBindings,
} from "@loopback/authentication-jwt";
Run Code Online (Sandbox Code Playgroud)

这会解决你的问题。如果您尝试创建自己的自定义用户,请参阅https://github.com/strongloop/loopback-next/tree/master/extensions/authentication-jwt#customizing-user 另外,您还导入了错误的 UserSerivce。它应该来自 @loopback/authentication-jwt 并且你的注入应该像

@inject(UserServiceBindings.USER_SERVICE) 公共 userService: MyUserService,