增加ejs模版, 用于渲染email验证结果

This commit is contained in:
zhl 2023-03-15 16:49:34 +08:00
parent d39d4d3f10
commit 4c4879a06c
6 changed files with 79 additions and 7 deletions

View File

@ -17,9 +17,11 @@
"@fastify/formbody": "^7.3.0",
"@fastify/helmet": "^10.0.1",
"@fastify/jwt": "^6.3.2",
"@fastify/view": "^7.4.1",
"axios": "^1.1.3",
"crypto": "^1.0.1",
"dotenv": "^16.0.3",
"ejs": "^3.1.9",
"fast-rbac": "^2.0.1",
"fastify": "^4.8.1",
"fastify-plugin": "^4.2.1",

View File

@ -30,6 +30,11 @@ export class ApiServer {
this.server.register(zReqParserPlugin)
this.server.register(helmet, { hidePoweredBy: false })
this.server.register(zTokenParserPlugin)
this.server.register(require("@fastify/view"), {
engine: {
ejs: require("ejs"),
},
});
this.server.register(apiAuthPlugin, {
secret: config.api.token_secret,

View File

@ -5,8 +5,8 @@ import {Account} from "modules/Account"
import {DEFAULT_VERIFY_HTML, EmailSvr} from "service/email.svr"
const TOKEN_PREFIX = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.'
class VerifyController extends BaseController {
class VerifyController extends BaseController {
@router('post /email/verify')
async sendVerifyEmail(req, res) {
let user = req.user
@ -34,20 +34,25 @@ class VerifyController extends BaseController {
async verifyEmail(req, res) {
let { k } = req.params
if (!k) {
throw new ZError(10, 'params mismatch')
return res.view("/templates/verify_email_error.ejs", { msg: "params mismatch" });
}
const token = k.indexOf(TOKEN_PREFIX) === -1 ? TOKEN_PREFIX + k : k
const reqData = await req.jwtVerify({ extractToken: () => token})
let reqData;
try {
reqData = await req.jwtVerify({ extractToken: () => token})
} catch (err) {
return res.view("/templates/verify_email_error.ejs", { msg: "token invalid." });
}
if (!reqData || !reqData.id) {
throw new ZError(12, 'token error')
return res.view("/templates/verify_email_error.ejs", { msg: "token error." });
}
let user = await Account.findById(reqData.id)
if (!user) {
throw new ZError(13, 'user not found')
return res.view("/templates/verify_email_error.ejs", { msg: "user not found." });
}
user.verified = true
user.emailVerifyTime = Date.now()
await user.save()
return {}
return res.view("/templates/verify_email_success.ejs" );
}
}

View File

@ -0,0 +1,2 @@
<h1>Email Verify Failed</h1>
<p><%= msg %></p>

View File

@ -0,0 +1,2 @@
<h1>Email Verified</h1>
<p>Thank you, your email address has been verified, and your account is now fully active.</p>

View File

@ -85,6 +85,14 @@
fastify-plugin "^4.0.0"
steed "^1.1.3"
"@fastify/view@^7.4.1":
version "7.4.1"
resolved "https://registry.yarnpkg.com/@fastify/view/-/view-7.4.1.tgz#265daba48386a5d3f69dfc446af468d72e0a8757"
integrity sha512-ahmRmSbNVM8bIoz0BAFnY0jNigom+xbPQ9Q1ZjmNOtGVVT3nYXCxw2OMkTr9iXwrJ4Le3EtWDHlFkZ2fCQ2hJA==
dependencies:
fastify-plugin "^4.0.0"
hashlru "^2.3.0"
"@humanwhocodes/config-array@^0.10.5":
version "0.10.7"
resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.10.7.tgz#6d53769fd0c222767e6452e8ebda825c22e9f0dc"
@ -491,6 +499,11 @@ asn1.js@^5.3.0:
minimalistic-assert "^1.0.0"
safer-buffer "^2.1.0"
async@^3.2.3:
version "3.2.4"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@ -552,6 +565,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
dependencies:
balanced-match "^1.0.0"
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@ -597,7 +617,7 @@ callsites@^3.0.0:
resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
chalk@^4.0.0:
chalk@^4.0.0, chalk@^4.0.2:
version "4.1.2"
resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@ -738,6 +758,13 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11:
dependencies:
safe-buffer "^5.0.1"
ejs@^3.1.9:
version "3.1.9"
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
dependencies:
jake "^10.8.5"
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
@ -1031,6 +1058,13 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
filelist@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
dependencies:
minimatch "^5.0.1"
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@ -1213,6 +1247,11 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
hashlru@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/hashlru/-/hashlru-2.3.0.tgz#5dc15928b3f6961a2056416bb3a4910216fdfb51"
integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==
helmet@^6.0.0:
version "6.0.0"
resolved "https://registry.npmmirror.com/helmet/-/helmet-6.0.0.tgz#8e183820ddccd7729a206ad73c577b264f495595"
@ -1313,6 +1352,16 @@ isexe@^2.0.0:
resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
jake@^10.8.5:
version "10.8.5"
resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46"
integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==
dependencies:
async "^3.2.3"
chalk "^4.0.2"
filelist "^1.0.1"
minimatch "^3.0.4"
jose@^2.0.6:
version "2.0.6"
resolved "https://registry.npmmirror.com/jose/-/jose-2.0.6.tgz#894ba19169af339d3911be933f913dd02fc57c7c"
@ -1580,6 +1629,13 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
minimatch@^5.0.1:
version "5.1.6"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
dependencies:
brace-expansion "^2.0.1"
minimist@^1.2.6:
version "1.2.7"
resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"