66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
import Env from "@ioc:Adonis/Core/Env";
 | 
						|
import type { HttpContextContract } from "@ioc:Adonis/Core/HttpContext";
 | 
						|
import Users from "App/Models/Users";
 | 
						|
import jwt from "jsonwebtoken";
 | 
						|
import { schema, rules } from "@ioc:Adonis/Core/Validator";
 | 
						|
export default class UsersController {
 | 
						|
  public async index({}: HttpContextContract) {}
 | 
						|
 | 
						|
  public async create({ request, response }: HttpContextContract) {
 | 
						|
    try {
 | 
						|
      if ((await Users.findBy("username", request.all().username)) === null) {
 | 
						|
        const userSchema = schema.create({
 | 
						|
          username: schema.string({ trim: true }, [
 | 
						|
            rules.unique({
 | 
						|
              table: "users",
 | 
						|
              column: "username",
 | 
						|
              caseInsensitive: true,
 | 
						|
            }),
 | 
						|
          ]),
 | 
						|
          password: schema.string({}, [rules.minLength(8)]),
 | 
						|
        });
 | 
						|
 | 
						|
        const data = await request.validate({ schema: userSchema });
 | 
						|
        const user = await Users.create(data);
 | 
						|
 | 
						|
        return response.status(201).send({ mess: "REGISTER_SUCCESS" });
 | 
						|
      } else {
 | 
						|
        return response.status(203).send({ mess: "USERNAME EXIST" });
 | 
						|
      }
 | 
						|
    } catch (error) {
 | 
						|
      response.status(500).send({ mess: "CREATE USER FAIL", error: error });
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  public async checkLogin({ request, response, auth }: HttpContextContract) {
 | 
						|
    const { username, password } = request.all();
 | 
						|
    try {
 | 
						|
      const userLogin = await Users.findBy("username", username);
 | 
						|
      if (userLogin !== null) {
 | 
						|
        const user = await auth.attempt(username, password);
 | 
						|
        delete user.$original.password;
 | 
						|
        const accessToken = jwt.sign(user.$original, Env.get("JWT_KEY"), {
 | 
						|
          expiresIn: "365d",
 | 
						|
        });
 | 
						|
        await auth.login(user);
 | 
						|
        return response
 | 
						|
          .status(200)
 | 
						|
          .send({ mess: "AUTHENTICATION_SUCCESS", accessToken: accessToken });
 | 
						|
      } else {
 | 
						|
        return response.status(204).send("USER NOT EXISTS");
 | 
						|
      }
 | 
						|
    } catch (error) {
 | 
						|
      console.log(error);
 | 
						|
      response.status(500).send({ mess: "LOGIN FAIL", error: error });
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  public async show({}: HttpContextContract) {}
 | 
						|
 | 
						|
  public async edit({}: HttpContextContract) {}
 | 
						|
 | 
						|
  public async update({}: HttpContextContract) {}
 | 
						|
 | 
						|
  public async destroy({}: HttpContextContract) {}
 | 
						|
}
 |