[flutter (플루터 앱 개발)] flutter pocketbase 사용법 2탄(회원가입)

 

post-thumbnail

2탄은 pocketbase 를 사용해서 회원가입을 하는 방법이다.

1. vscode 에서 회원가입 컨트롤러 구현

UI 는 알아서 예쁘게 꾸미시면 됩니다.

진짜 기본만하겠습니다.

아 그리고 저는 Getx 를 사용합니다.
get 을 안쓰시는 분들은 어떻게 동작하는지 참고하시면 좋을거같습니다.

  • 회원가입 페이지 컨트롤러 생성

register-controller.dart

import 'dart:developer';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pocketbase/pocketbase.dart';

import '../global/g_dio.dart';

class RegisterPageController extends GetxController {
  String baseUrl = 'http://127.0.0.1:8090';

  final pb = PocketBase('http://127.0.0.1:8090');
  TextEditingController userId = TextEditingController();
  TextEditingController passWord = TextEditingController();

  
}

register 컨트롤러를 만들고 textField 에 아이디 , 비밀번호, 비밀번호 확인을 입력했을때 text 를 입력받을수있게
TextEditngController 를 선언한다

그리고 register 회원가입 함수를 만든다

그 전에 먼저 pocketbase 의 관리자 토큰을 확인해야함

먼저는 날것의 방법으로 해보려고함

pocketbase 로그인 창으로 다시 이동

F12 개발자 툴 open 하고

로그인하면

이렇게 나옴

밑으로 내리면

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

관리자 토큰 나옴

//! 회원가입 기능
  register() async {
    try {
      var res = await dio.post(
        '$baseUrl/api/collections/users/records',
        options: Options(
          headers: {
            'Authorization':
                'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDc2NjMzMTIsImlkIjoiMjJ6bnExY3V1ZWk0c2U4IiwidHlwZSI6ImFkbWluIn0.oiJnEpQ0ZLEgUNuwkuVMN1muRQnxi7cXTsfJZ2fMnEk',
            'Content-Type': 'application/json',
          },
        ),
        data: {
          'email': userId.text,
          'password': passWord.text,
          'passwordConfirm': passWordConfirm.text,
        },
      );
      inspect(res.data);
      Get.snackbar('success', 'register success',
          backgroundColor: Colors.green, duration: Duration(seconds: 10));
    } catch (e, stackTrace) {
      print(e);
      print(stackTrace);
    }
  }

이렇게 붙여넣으면 됨

컨트롤러 전체 코드

import 'dart:developer';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pocketbase/pocketbase.dart';

import '../global/g_dio.dart';

class RegisterPageController extends GetxController {
  String baseUrl = 'http://127.0.0.1:8090';

  final pb = PocketBase('http://127.0.0.1:8090');
  TextEditingController userId = TextEditingController();
  TextEditingController passWord = TextEditingController();
  TextEditingController passWordConfirm = TextEditingController();

  //! 회원가입 기능
  register() async {
    try {
      var res = await dio.post(
        '$baseUrl/api/collections/users/records',
        options: Options(
          headers: {
            'Authorization':
                'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MDc2NjMzMTIsImlkIjoiMjJ6bnExY3V1ZWk0c2U4IiwidHlwZSI6ImFkbWluIn0.oiJnEpQ0ZLEgUNuwkuVMN1muRQnxi7cXTsfJZ2fMnEk',
            'Content-Type': 'application/json',
          },
        ),
        data: {
          'email': userId.text,
          'password': passWord.text,
          'passwordConfirm': passWordConfirm.text,
        },
      );
      inspect(res.data);
      Get.snackbar('success', 'register success',
          backgroundColor: Colors.green, duration: Duration(seconds: 10));
    } catch (e, stackTrace) {
      print(e);
      print(stackTrace);
    }
  }
}

많은 분들이 처음 flutter 를 할때 api 요청시 header 에 토큰을 넣는방법을 궁금해하시거나
모르는 경우가 있음

저도 그랬음

위의 코드를 보면 option 안에 headers 에다가 토큰을 넣으면됨

아 그리고 Content-Type : application/json 을 꼭 넣어줘야함
안넣으면 400 에러남

3. vscode 에서 회원가입 페이지 구현

회원가입 페이지 전체 코드

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:personal_blog/bin/register-pg-ctl.dart';

class RegisterPage extends StatefulWidget {
  const RegisterPage({super.key});

  @override
  State<RegisterPage> createState() => _RegisterPageState();
}

class _RegisterPageState extends State<RegisterPage> {
  @override
  Widget build(BuildContext context) {
    RegisterPageController controller = Get.put(RegisterPageController());
    return Scaffold(
      body: Container(
        padding: EdgeInsets.symmetric(
          horizontal: 20,
        ),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Container(
              alignment: Alignment.centerLeft,
              child: Text(
                '아이디',
              ),
            ),
            SizedBox(
              height: 10,
            ),
            TextField(
              controller: controller.userId,
              decoration: InputDecoration(
                border: OutlineInputBorder(
                    borderSide: BorderSide(
                      color: Colors.black,
                      width: 1,
                    ),
                    borderRadius: BorderRadius.circular(15)),
              ),
            ),
            SizedBox(
              height: 30,
            ),
            Container(
              alignment: Alignment.centerLeft,
              child: Text(
                '비밀번호',
              ),
            ),
            SizedBox(
              height: 10,
            ),
            TextField(
              controller: controller.passWord,
              decoration: InputDecoration(
                border: OutlineInputBorder(
                    borderSide: BorderSide(
                      color: Colors.black,
                      width: 1,
                    ),
                    borderRadius: BorderRadius.circular(15)),
              ),
            ),
            SizedBox(
              height: 30,
            ),
            Container(
              alignment: Alignment.centerLeft,
              child: Text(
                '비밀번호 확인',
              ),
            ),
            SizedBox(
              height: 10,
            ),
            TextField(
              controller: controller.passWordConfirm,
              decoration: InputDecoration(
                border: OutlineInputBorder(
                    borderSide: BorderSide(
                      color: Colors.black,
                      width: 1,
                    ),
                    borderRadius: BorderRadius.circular(15)),
              ),
            ),
            SizedBox(
              height: 10,
            ),
            ElevatedButton(
              onPressed: () {
                controller.register();
              },
              child: Text(
                '회원가입',
              ),
            )
          ],
        ),
      ),
    );
  }
}

email 은 무조건 @ 랑 .com 붙여줘야하고
비밀번호는 8 ~ 72 자리가 되어야함
이러고 회원가입 버튼 누르면 회원가입 완료됨

그리고 회원가입 정보가 생성됨

죄송함다 저녁에 정신없이 작성하다 보니까 이상한 collection 에 회원가입도 아니고 로그인도 아닌 이상한 post 요청 기능을 만들어버렸네요

이번에는 관리자 토큰을 날것의 방법으로 가져와서 썻는데 이후에 좀더 보안적인 부분을 신경쓴 방법을 적어보겠습니다.
다음은 로그인 기능 구현방법을 소개해보겠슴다

[출처] https://velog.io/@sk1440sk/flutter-pocketbase-%EC%82%AC%EC%9A%A9%EB%B2%95-2%ED%83%84%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%EB%A1%9C%EA%B7%B8%EC%9D%B8

 

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
» [flutter (플루터 앱 개발)] flutter pocketbase 사용법 2탄(회원가입) file 졸리운_곰 2024.06.10 272
150 [flutter (플루터 앱 개발)] flutter pocketbase 사용방법 1탄(초기설정) file 졸리운_곰 2024.06.10 242
149 [게임 일반] 카드 덱 이미지 (트럼프 카드) 졸리운_곰 2024.05.27 224
148 [flutter (플루터 앱 개발)]Flutter - InAppWebview Communication (인앱웹뷰로 웹과 앱 양방향 통신하기, 자바스크립트 커뮤니케이션) file 졸리운_곰 2024.04.13 275
147 [flutter (플루터 앱 개발)] flutter - fvm 적용하기 (Futter Version Management) file 졸리운_곰 2024.04.11 189
146 [flutter (플루터 앱 개발)]Using Flutter FVM in Windows & MacOS file 졸리운_곰 2024.04.10 294
145 [flutter (플루터 앱 개발)] Flutter version management in Visual Studio Code with FVM 졸리운_곰 2024.04.10 231
144 [flutter (플루터 앱 개발)] pHp backend with flutter file 졸리운_곰 2024.03.18 350
143 [flutter (플루터 앱 개발)] [Flutter] fvm으로 Flutter 버전 관리 졸리운_곰 2024.03.17 203
142 [firebase v9] 파이어베이스 버전9 시작하기 - firebase v9 file 졸리운_곰 2023.12.24 309
141 [ Firebase ] v9부터 크게 달라진 사용법들 모아보기 file 졸리운_곰 2023.12.24 268
140 [게임 개발 일반] 콘솔은 어려울수록, 모바일은 쉬울수록 '돈' 쓴다 file 졸리운_곰 2023.10.30 264
139 [Unity] How to Create a Metaverse dApp with Unity : Unity로 Metaverse dApp을 만드는 방법 file 졸리운_곰 2023.09.13 397
138 [게임 개발 일반] 게임 초기 기획서 작성 방법 졸리운_곰 2023.07.16 250
137 [GameMaker Studio] Neural Network in Game Maker Studio – part 4 file 졸리운_곰 2023.07.07 462
136 [GameMaker Studio] Neural Network in Game Maker Studio – part 3 file 졸리운_곰 2023.07.07 413
135 [GameMaker Studio] Neural Network in Game Maker Studio – part 2 file 졸리운_곰 2023.07.07 506
134 [GameMaker Studio] Neural Network in Game Maker Studio – part 1 file 졸리운_곰 2023.07.07 378
133 [construct2] HOW TO REMOVE THE SCREEN POWERED BY CONSTRUCT 2? file 졸리운_곰 2023.03.24 267
132 [flutter (플루터 앱 개발)] How to use Flutter’s Rest API file 졸리운_곰 2023.03.21 349
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED