import { Req, Res, ReturnValue } from "#/global" import { LoginUserSchema, RegisterUserSchema, UserSchema } from "@/schema" import { gFail, gSuccess } from "@/util" import { auth, config, method, route, route_path, validate } from "@noderun/hapi-router" import * as bcrypt from "bcrypt" /** * 登录界面 */ export default class { @route_path("/login") @auth("try") @method("GET") async login_GET(request: Req, h: Res): ReturnValue { if (request.auth.isAuthenticated) { request.yar.flash("warning", "您已经登陆") return h.redirect("/") } else { logger.debug("未登录") } return h.view("views/login.pug") } @validate({ payload: LoginUserSchema, $errto: "/login", // failAction: 'log' failAction: "function", // failReason: "用户名或密码错误,请重试", }) @method("POST") @route_path("/login") async login_POST(request: Req, h: Res): ReturnValue { const { username, password, referrer } = request.payload as any const User = request.getModel("User") const account = await User.findOne({ where: { username: username } }) if (!account || !(await bcrypt.compare(password, account.password))) { request.yar.flash("error", "Invalid username or password") return h.redirect("/login") } request.cookieAuth.set({ id: account.id, nickname: account.nickname }) request.yar.flash("success", "用户已登录") return h.redirect(referrer ? referrer : "/") } }