増幅と反応:カスタムエンドポイントの追加
23235 ワード
このチュートリアルでは、完全なスタックアプリケーションを構築する方法について説明します.
我々がするものは、Aをつくるために一歩ずつ行くことです
あなたが動けなくなるならば、どんな質問か、またはちょうどあなた自身のような他のアンプ開発者にHiを言いたいですDiscord !
ステップ1 -ユーザーを作成する ステップ2 -署名されたユーザーを得る ステップ3 -もう一度実行してください ステップ4 -ラップアップ
前の手順では、 オープン
ここでは、ユーザーがサインアップできるようにするメソッドを追加します.次のメソッドをコピーします
新しいユーザを作成するには、新しいエンドポイントを作成する必要があります
最後に、オープン
新しいユーザーが作成されるのを許容する他に、私たちも、現在署名されたユーザーに関する情報を得ることができたいです.
オープン
復帰
新規追加
オープン
新規追加
オープン
新規追加
我々のバックエンドに必要な更新プログラムをバックエンドをスピンし、我々の自己記録された休憩点を探る.次のコマンドを実行します.
バックエンドが実行されるとhttp://localhost:3000/api/ そして、 詳細を表示するには、エンドポイントをクリックして 値を変更する
クリックの後
我々は最終的に我々のバックエンドにいくつかのより多くの変更を行う必要がありますが、今ではユーザーがアカウントを作成するだけでなく、既存のアカウントとのサインを作成することができます.
次の週にステップ4をチェックしてくださいAmplication docs site 今すぐフルガイド!
この手順の変更を表示するにはvisit here .
我々がするものは、Aをつくるために一歩ずつ行くことです
Todos
あなたのフロントエンドとあなたのバックエンドのための増幅のための反応を使用してアプリケーション.あなたが動けなくなるならば、どんな質問か、またはちょうどあなた自身のような他のアンプ開発者にHiを言いたいですDiscord !
目次
ステップ1 -ユーザーを作成する
前の手順では、
User
ユーザのみを使用するUser
ロールエントリを作成できます.これは一般的に安全ですが、新しいユーザーにもアカウントを作成できます.エンドユーザーを作成するためのエンドポイントを変更する代わりに、新しいユーザを作成できるように新しいエンドポイントを構築します.server/src/auth/auth.service.ts
IDEで.にAuthService
クラスは既にメソッドが存在することを確認します.login
, これはユーザを検証し、有効なユーザならアクセストークンを返す.ここでは、ユーザーがサインアップできるようにするメソッドを追加します.次のメソッドをコピーします
login
方法、そしてこのコードが何をするかについてより良い理解を得るためにコメントを読む時間.async signup(credentials: Credentials): Promise<UserInfo> {
// Extract the username and password from the body of the request
const { username, password } = credentials;
// Here we attempt to create a new user
const user = await this.userService.create({
data: {
username,
password,
roles: ['todoUser'], // Here we assign every new user the `Todo User` role
},
});
// If creating a new user fails throw an error
if (!user) {
throw new UnauthorizedException("Could not create user");
}
// Create an access token for the newly created user
//@ts-ignore
const accessToken = await this.tokenService.createToken(username, password);
// Return the access token as well as the some details about the user
return {
accessToken,
username: user.username,
roles: user.roles,
};
}
新しいユーザを作成するには、新しいエンドポイントを作成する必要があります
AuthController
. オープンserver/src/auth/auth.controller.ts
そして次のメソッドをAuthController
. typescriptに露出していなかった場合に異なるかもしれません.@Post("signup")
. The @
の注釈decorator . デコレータは、特定のプロパティやロジックを簡単にクラス、メソッド、プロパティなどに割り当てることができる機能です.このデコレータはsignup
メソッドとしてPOST
エンドポイント/signup
.@Post("signup")
async signup(@Body() body: Credentials): Promise<UserInfo> {
return this.authService.signup(body);
}
最後に、オープン
server/src/auth/auth.resolver.ts
そして次のメソッドをAuthResolver
クラス.上記のように、このメソッドはまた、デコレータMutation
デコレータ.これはsignup
我々のGraphSQLサーバーの突然変異としての方法.@Mutation(() => UserInfo)
async signup(@Args() args: LoginArgs): Promise<UserInfo> {
return this.authService.signup(args.credentials);
}
ステップ2 -署名されたユーザーを得る
新しいユーザーが作成されるのを許容する他に、私たちも、現在署名されたユーザーに関する情報を得ることができたいです.
オープン
server/src/auth/token.service.ts
. ヒアTokenService
クラスがエクスポートされ、ユーザーがログインするときにJWTトークンを作成する責任があります.JWTトークンは、我々のアプリケーションが我々のバックエンドに要求をして、現在のユーザーのユーザ名を保存するのを認可するアクセストークンです.我々は、ユーザー名を抽出して、それらを見つけることができますUser
エンティティ.このクラスに次のメソッドを追加します./**
* @param bearer
* @returns the username from a jwt token
*/
decodeToken(bearer: string): string {
return this.jwtService.verify(bearer).username;
}
復帰
server/src/auth/auth.service.ts
ファイルの先頭にあるインポートを置き換えます.import {
Injectable,
UnauthorizedException,
NotFoundException,
} from "@nestjs/common";
// @ts-ignore
// eslint-disable-next-line
import { UserService } from "../user/user.service";
import { Credentials } from "./Credentials";
import { PasswordService } from "./password.service";
import { TokenService } from "./token.service";
import { UserInfo } from "./UserInfo";
import { User } from "../user/base/User";
新規追加
me
メソッドAuthService
クラス.このメソッドはHTTPリクエストの認証ヘッダを受け取り、JWTトークンをデコードしてusername
を返します.HTTPリクエストまたはGraphqlクエリを使用してこの要求を行うには、AuthController
and AuthResolver
として我々はsignup
上記のメソッド.async me(authorization: string = ""): Promise<User> {
const bearer = authorization.replace(/^Bearer\s/, "");
const username = this.tokenService.decodeToken(bearer);
const result = await this.userService.findOne({
where: { username },
select: {
createdAt: true,
firstName: true,
id: true,
lastName: true,
roles: true,
updatedAt: true,
username: true,
},
});
if (!result) {
throw new NotFoundException(`No resource was found for ${username}`);
}
return result;
}
オープン
server/src/auth/auth.controller.ts
を参照してください.このメソッドはGet
それが意味するデコレーターGET
データを取得する際にのみ使用するリクエスト.他にも2つの新しい装飾子があります.ApiBearerAuth
and ApiOkResponse
. 彼らのどちらも必要でない間、彼らはUIがこの終点のために有意義なデータを示すために我々の文書化された終点を読むのに用いられるのを許します.このエンドポイントへの要求は認可されなければならないと言います、そのように、我々はJWTアクセストークンを得ることができます.また、このリクエストによってどのようなオブジェクトが返されるかを定義しますエーUser
オブジェクト.import { Body, Controller, Post, Get, Req } from "@nestjs/common";
import { ApiBearerAuth, ApiOkResponse, ApiTags } from "@nestjs/swagger";
import { Request } from "express";
import { AuthService } from "./auth.service";
import { Credentials } from "./Credentials";
import { UserInfo } from "./UserInfo";
import { User } from "../user/base/User";
新規追加
me
メソッドAuthController
クラス.@ApiBearerAuth()
@ApiOkResponse({ type: User })
@Get("me")
async me(@Req() request: Request): Promise<User> {
return this.authService.me(request.headers.authorization);
}
オープン
server/src/auth/auth.resolver.ts
ファイルの先頭にあるインポートを置き換えます.import * as common from "@nestjs/common";
import { Args, Mutation, Query, Resolver, Context } from "@nestjs/graphql";
import { Request } from "express";
import * as gqlACGuard from "../auth/gqlAC.guard";
import { AuthService } from "./auth.service";
import { GqlDefaultAuthGuard } from "./gqlDefaultAuth.guard";
import { UserData } from "./userData.decorator";
import { LoginArgs } from "./LoginArgs";
import { UserInfo } from "./UserInfo";
import { User } from "../user/base/User";
新規追加
me
メソッドAuthResolver
クラス.@Query(() => User)
async me(@Context('req') request: Request): Promise<User> {
return this.authService.me(request.headers.authorization);
}
ステップ3 -もう一度実行してください
我々のバックエンドに必要な更新プログラムをバックエンドをスピンし、我々の自己記録された休憩点を探る.次のコマンドを実行します.
npm run start:backend
auth
セクション.新しいPOST
エンドポイント/api/signup
, が表示されます.エンドポイントは、ブラウザで右テストすることができます.Try it out
. username
and password
任意の文字列値とクリックExecute
.Execute
, スクロールダウンしてリクエストの結果を確認します.ステップ4 -ラップアップ
我々は最終的に我々のバックエンドにいくつかのより多くの変更を行う必要がありますが、今ではユーザーがアカウントを作成するだけでなく、既存のアカウントとのサインを作成することができます.
次の週にステップ4をチェックしてくださいAmplication docs site 今すぐフルガイド!
この手順の変更を表示するにはvisit here .
Reference
この問題について(増幅と反応:カスタムエンドポイントの追加), 我々は、より多くの情報をここで見つけました https://dev.to/amplication/amplication-react-adding-custom-endpoints-3ipmテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol