172만명의 커뮤니티!! 함께 토론해봐요.
해결됨
Supabase, Next 풀 스택 시작하기 (feat. 슈파베이스 OAuth, nextjs 14)
'use client'; import React, { useEffect, useState } from 'react'; import { Auth } from '@supabase/auth-ui-react'; import { ThemeSupa } from '@supabase/auth-ui-shared'; import { createSupabaseBrowserClient } from '@/lib/client/supabase'; import useHydrate from '@/app/hooks/useHydrate'; const AuthUI = () => { const supabase = createSupabaseBrowserClient(); const isMount = useHydrate(); const [user, setUser] = useState(); const getUserInfo = async () => { const result = await supabase.auth.getUser(); console.log(result); if (result?.data?.user) setUser(result?.data?.user); }; const handleLogout = async () => { supabase.auth.signOut(); window.location.reload(); }; useEffect(() => { getUserInfo(); }, []); if (!isMount) return null; return ( <section className="w-full"> <div>{user ? `로그인 됨${user?.email}` : '로그아웃'}</div> <> {user && ( <button onClick={handleLogout} className="border-2 border-black"> 로그아웃 </button> )} </> <div className="mx-auto max-w-[500px]"> <Auth redirectTo={process.env.NEXT_PUBLIC_AUTH_REDIRECT_TO} supabaseClient={supabase} appearance={{ theme: ThemeSupa }} onlyThirdPartyProviders providers={['google']} /> </div> </section> ); }; export default AuthUI; {"code":400,"error_code":"validation_failed","msg":"Unsupported provider: provider is not enabled"} 구글 로그인 시 해당 에러가 발생합니다 설정 같은 부분은 강의에 맞게 설정하였습니다
moko
2024-10-31T07:52:45.745Z
댓글 2
좋아요 0
조회수 426
미해결
코드로 배우는 React 19 with 스프링부트 API서버
makeDiv를 써서 화면 구성을 했는데 컴포넌트를 쓰는것과 저렇게 불러오는것의 차이가 있을까요?
pag1yun
2024-10-31T06:19:10.276Z
댓글 1
좋아요 0
조회수 89
해결됨
실전! FastAPI 입문
swagger 로 opt 생성, 검증 api 실행을 했더니 sqlalchemy.engine.Engine ROLLBACK 로그가 출력이 됩니다. 원인을 모르겠습니다... 로그 INFO: Application startup complete. INFO: 127.0.0.1:63654 - "GET /docs HTTP/1.1" 200 OK email-validator not installed, email fields will be treated as str. To install, run: pip install email-validator INFO: 127.0.0.1:63654 - "GET /openapi.json HTTP/1.1" 200 OK 2024-10-31 14:25:27,367 INFO sqlalchemy.engine.Engine SELECT DATABASE() 2024-10-31 14:25:27,367 INFO sqlalchemy.engine.Engine [raw sql] {} 2024-10-31 14:25:27,369 INFO sqlalchemy.engine.Engine SELECT @@sql_mode 2024-10-31 14:25:27,369 INFO sqlalchemy.engine.Engine [raw sql] {} 2024-10-31 14:25:27,369 INFO sqlalchemy.engine.Engine SELECT @@lower_case_table_names 2024-10-31 14:25:27,370 INFO sqlalchemy.engine.Engine [raw sql] {} 2024-10-31 14:25:27,372 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2024-10-31 14:25:27,377 INFO sqlalchemy.engine.Engine SELECT user.id, user.username, user.password, todo_1.id AS id_1, todo_1.contents, todo_1.is_done, todo_1.user_id FROM user LEFT OUTER JOIN todo AS todo_1 ON user.id = todo_1.user_id WHERE user.username = %(username_1)s 2024-10-31 14:25:27,377 INFO sqlalchemy.engine.Engine [generated in 0.00018s] {'username_1': 'admin'} INFO: 127.0.0.1:63658 - "POST /users/log-in HTTP/1.1" 200 OK 2024-10-31 14:25:27,603 INFO sqlalchemy.engine.Engine ROLLBACK INFO: 127.0.0.1:63664 - "POST /users/email/otp HTTP/1.1" 200 OK 2024-10-31 14:26:02,514 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2024-10-31 14:26:02,514 INFO sqlalchemy.engine.Engine SELECT user.id, user.username, user.password, todo_1.id AS id_1, todo_1.contents, todo_1.is_done, todo_1.user_id FROM user LEFT OUTER JOIN todo AS todo_1 ON user.id = todo_1.user_id WHERE user.username = %(username_1)s 2024-10-31 14:26:02,514 INFO sqlalchemy.engine.Engine [cached since 35.14s ago] {'username_1': 'admin'} INFO: 127.0.0.1:63671 - "POST /users/email/verify HTTP/1.1" 200 OK Sending email to admin@fastapi.com! 2024-10-31 14:26:12,519 INFO sqlalchemy.engine.Engine ROLLBACK src/database/ repository.py from typing import List, Optional from fastapi import Depends from sqlalchemy import select, delete from sqlalchemy.orm import Session from database.connection import get_db from database.orm import ToDo, User class ToDoRepository: def __init__(self, session: Session = Depends(get_db)): self.session = session def get_todos(self) -> List[ToDo]: return list(self.session.scalars(select(ToDo))) def get_todo_by_todo_id(self, todo_id: int) -> ToDo | None: return self.session.scalar(select(ToDo).where(ToDo.id == todo_id)) def create_todo(self, todo: ToDo) -> ToDo: self.session.add(instance=todo) self.session.commit() self.session.refresh(instance=todo) return todo def update_todo(self, todo: ToDo) -> ToDo: self.session.add(instance=todo) self.session.commit() self.session.refresh(instance=todo) return todo def delete_todo(self, todo_id: int) -> None: self.session.execute(delete(ToDo).where(ToDo.id == todo_id)) self.session.commit() class UserRepository: def __init__(self, session: Session = Depends(get_db)): self.session = session def get_user_by_username(self, username: str) -> User | None: return self.session.scalar(select(User).where(User.username == username)) def save_user(self, user: User) -> User: self.session.add(instance=user) self.session.commit() self.session.refresh(instance=user) return user src/service/ user.py import random import time import bcrypt from datetime import datetime, timedelta from jose import jwt class UserService: encoding: str = "UTF-8" JWT_SECRET_KEY: str = "f002393019e8776398370aa671767b860b702854724591cd0da5fc97bda3daf1" JWT_ALGORITHM: str = "HS256" def hash_password(self, plain_password: str) -> str: hashed_password: bytes = bcrypt.hashpw( plain_password.encode(self.encoding), salt=bcrypt.gensalt() ) return hashed_password.decode(self.encoding) def verify_password( self, plain_password: str, hashed_password: str ) -> bool: return bcrypt.checkpw( plain_password.encode(self.encoding), hashed_password.encode(self.encoding) ) def creat_jwt(self, username: str) -> str: return jwt.encode( { "sub": username, "exp": datetime.now() + timedelta(days=1), }, self.JWT_SECRET_KEY, algorithm=self.JWT_ALGORITHM ) def decode_jwt(self, access_token: str) -> str: payload: dict = jwt.decode( access_token, self.JWT_SECRET_KEY, algorithms=[self.JWT_ALGORITHM] ) return payload["sub"] @staticmethod def create_otp() -> int: return random.randint(1000, 9999) @staticmethod def send_email_to_user(email: str) -> None: time.sleep(10) print(f"Sending email to {email}!") src/api/ user.py from fastapi import APIRouter, Depends, HTTPException, BackgroundTasks from cache import redis_client from database.orm import User from database.repository import UserRepository from schema.request import SignUpRequest, LoginRequest, CreateOTPRequest, VerifyOTPRequest from schema.response import UserSchema, JWTResponse from security import get_access_token from service.user import UserService router = APIRouter(prefix="/users", tags=["USER"]) @router.post("/sign-up", status_code=201) def user_sign_up_handler( request: SignUpRequest, user_service: UserService = Depends(), user_repository: UserRepository = Depends(), ): hashed_password: str = user_service.hash_password( plain_password=request.password ) user: User = User.create( username=request.username, hashed_password=hashed_password ) user: User = user_repository.save_user(user) return UserSchema.from_orm(user) @router.post("/log-in", status_code=200) def user_log_in_handler( request: LoginRequest, user_service: UserService = Depends(), user_repository: UserRepository = Depends(), ): user: User | None = user_repository.get_user_by_username( username=request.username ) if not user: raise HTTPException(status_code=404, detail="User Not Found") verified: bool = user_service.verify_password( plain_password=request.password, hashed_password=user.password ) if not verified: raise HTTPException(status_code=401, detail="Not Authorized") access_token: str = user_service.creat_jwt(username=user.username) return JWTResponse(access_token=access_token) @router.post("/email/otp") def create_otp_handler( request: CreateOTPRequest, _: str = Depends(get_access_token), user_service: UserService = Depends() ): otp: int = user_service.create_otp() redis_client.set(request.email, otp) redis_client.expire(request.email, 3 * 60) return {"otp": otp} @router.post("/email/verify") def verify_otp_handler( request: VerifyOTPRequest, background_tasks: BackgroundTasks, access_token: str = Depends(get_access_token), user_service: UserService = Depends(), user_repo: UserRepository = Depends(), ): otp: str | None = redis_client.get(request.email) if not otp: raise HTTPException(status_code=400, detail="Bad Request") if request.otp != int(otp): raise HTTPException(status_code=400, detail="Bad Request") username: str = user_service.decode_jwt(access_token=access_token) user: User | None = user_repo.get_user_by_username(username) if not user: raise HTTPException(status_code=404, detail="User Not Found") background_tasks.add_task( user_service.send_email_to_user, email="admin@fastapi.com" ) return UserSchema.from_orm(user)
python 리팩토링 orm FastAPI pytest
포팃
2024-10-31T05:48:52.384Z
댓글 1
좋아요 0
조회수 243
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
김영한님 강의를 따라하면서 실습한 코드를 github public 레포로 올려도 되나요 ? 업로드 해도 되는 항목과 업로드 하면 안되는 항목이 궁금합니다 실습하면서 따라 작성한 코드 다운로드 받은 코드 강의자료 pdf 파일 강의자료 pdf 일부분 캡쳐 (예, spring mvc 구조 그림, 회원가입 도메인 요구사항 ERD) 감사합니다
권도균
2024-10-31T05:01:41.188Z
댓글 2
좋아요 0
조회수 278
해결됨
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
~와 같다라는 식을 쓸때 =가 아닌 == 로 표기하는 이유가 있을까요?
python 머신러닝 빅데이터 pandas 빅데이터분석기사
shs4166
2024-10-31T03:26:41.849Z
댓글 2
좋아요 0
조회수 87
해결됨
한 입 크기로 잘라먹는 Next.js
강의 중간에 요런식으로 설명나오는거 어떤 익스텐션 깔아야하나요?
2024-10-31T02:22:00.777Z
댓글 2
좋아요 0
조회수 162
해결됨
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
판다스 강의 다듣고 작업형 들으려는데 작업형1모의문제1 부터 들으면 될까요? 강의안에서 지난시간에 작업형 첫번째 예시문제랑 기출문제를 풀어봤다고 말씀하시는데 풀어본 기억이 없어서요… 혹시 이전에 들어야하는 강의가 있을까요?
python 머신러닝 빅데이터 pandas 빅데이터분석기사
권종오
2024-10-31T01:18:14.582Z
댓글 2
좋아요 0
조회수 149
해결됨
한 입 크기로 잘라먹는 Next.js
안녕하세요!! 페이지 별 적용을 원하는 레이아웃이 있는 경우 getLayout 함수를 컴포넌트의 메서드로 추가하여 적용하는 강의를 들었습니다. 그런 식으로 레이아웃을 설정하는 방법은 처음 봐서 매우 새롭고 신기하고 즐거운 강좌였습니다. 감사합니다! 궁금한 점이 있는데요, 그렇게 했을 때 페이지별로 최상단에 SearchableLayout 컴포넌트를 적용하는 것과 무슨 차이가 있는지 궁금했습니다. (혹은 강의에서 그렇게 설명해주신 이유가 궁금합니다!)
Sunny Sideup
2024-10-30T23:59:13.067Z
댓글 2
좋아요 0
조회수 189
미해결
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
/ 사용할 때와 : 사용할 때 어떻게 구분하나요?
python 머신러닝 빅데이터 pandas 빅데이터분석기사
shs4166
2024-10-30T23:48:55.952Z
댓글 2
좋아요 0
조회수 91
해결됨
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
pd.DataFrame 을 하기도 전인데 이렇게 표 형태로 나오는 건 왜일까요?
python 머신러닝 빅데이터 pandas 빅데이터분석기사
shs4166
2024-10-30T15:35:43.644Z
댓글 1
좋아요 0
조회수 83
해결됨
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
어떨 때는 그냥 df로 데이터를 확인하고 어떨 때는 df.head()로 확인을 하는데 무슨 차이인가요?
python 머신러닝 빅데이터 pandas 빅데이터분석기사
shs4166
2024-10-30T15:05:16.206Z
댓글 2
좋아요 0
조회수 90
미해결
처음 만난 리덕스(Redux)
function counter(state,action){ if(typeof state ==="undefined"){ return 0; } switch (action.type){ case "INCREMENT" return state +1; case "DECREMENT" return state -1; default : return state; } } var store = Redux.createStore(counter); var calueELem = document.getElementById("value") function render(){ valueElem.innerHTML = store.getState().toString() } render(); store.subscribe(render); 여기 코드에서 궁금한 부분이 있어서 질문드립니다! 처음에 상태를 설정하지 않았는데 강사님은 왜 초기 상태 count 가 0이라고 하신건가요?
react redux redux-thunk redux-toolkit redux-saga
ccccssung
2024-10-30T14:42:24.986Z
댓글 2
좋아요 1
조회수 152
해결됨
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
제가 인강은 처음이라 어디서 자료를 불러와야 하는지 모르겠습니다..
python 머신러닝 빅데이터 pandas 빅데이터분석기사
김치현
2024-10-30T12:54:53.991Z
댓글 2
좋아요 0
조회수 123
미해결
RAG 마스터: 기초부터 고급기법까지 (feat. LangChain)
테슬라_KR.txt / 리비안_KR.txt 파일이 첨부파일에 없어요.. 첨부파일 중 pdf 폴더도 비어있습니다..
정성범
2024-10-30T12:37:00.288Z
댓글 2
좋아요 1
조회수 247
미해결
[React 2부] 고급 주제와 훅
MyReact.useRef관련하여 질문드립니다 const ref2 = MyReact.useRef(); <input ref={ref}/> 이렇게 사용하면 input태그에 접근할 수 있는데 정확히 어떤 원리로 접근 가능한건가요?? ref2는 원래 undefined값이 아닌가요?
react React-Context react-hooks react-router react-component
ccccssung
2024-10-30T11:21:05.684Z
댓글 2
좋아요 0
조회수 177
미해결
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
원래 주석처리 된거 드래그 후 ctrl + / 를 해도 주석변경이 안되고 계속 / 기호가 나와요. 항상 그러는게 아니라 어떨때는 되고 어떨때는 안되는데 혹시 이유가 있을까요?
python 머신러닝 빅데이터 pandas 빅데이터분석기사
박건우
2024-10-30T05:54:20.049Z
댓글 3
좋아요 0
조회수 320
미해결
코드로 배우는 React 19 with 스프링부트 API서버
섹션8에 axios인터셉터와 access토큰 보고있습니다 여기서 지금 todo나 product를 클릭하면 오류나는데 jwtfilter에서 String accessToken = authHeaderStr.substring(7); 이부분에서 request.getHeader ==null 이라 오류가뜨는데 음.,..이게 mainpage나 about페이지에서는 왜오류가 안나는 지 궁금합니다...왜냐면 OncePerRequestFilter 를 상속받아서 if(path.startsWith("/api/member/")){ return true; } 조건문을 member만 필터 제외시킨거같은데...
react spring-boot jpa jwt redux-toolkit
김우철
2024-10-30T05:38:48.260Z
댓글 3
좋아요 0
조회수 234
해결됨
Next + React Query로 SNS 서비스 만들기
안녕하세요 nextjs를 활용해서 프로젝트를 진행하는 중에 해결되지 않는 문제가 발생하여 질문 드립니다. 현재 도커를 활용해서 nextjs를 배포하고 있는데 middleware에서 request.nextUrl.origin값이 https://localhost:3000이 들어가고 있습니다. x-forwarded-host를 찍었을때는 제가 사용하는 https://test.domain.com이 들어가는데 request.nextUrl.origin에 x-forwared-host와 같은 값이 들어가도록 설정하기 위한 방법이 있는지 알 수 있을까요??
react next.js react-query next-auth msw
박지수 Jisu Park
2024-10-30T05:29:05.803Z
댓글 2
좋아요 0
조회수 313
해결됨
직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
이건 질문 아닙니다. ^^ 구현하고 싶은 간단한 내용이 있었는데, 강의에서 배운 내용을 기반으로 하고, A.I.에 질문하여 코드를 작성한 후 정상 작동에 성공했습니다. 저 같은 왕초보도 작동하는 뭔가를 만들어 내게 하는 이 강의는 정말 훌륭합니다~! 아주 기초적이고 작은 성공이라도 동기부여를 위해 소중합니다. ^^ # ■ 아래 코드의 용도 --- 작동 성공했음 _24-10-30 11:26 # "C:\\Users\\user\\Desktop\\제목 추가\\"에 여러 개의 hwp 파일들이 있을 때 # 파일을 하나씩 열고, 문서의 맨 처음으로 이동하여 파일명(~~~.hwp)을 타이핑하고 엔터를 3번 친 후 저장하고 닫기 import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL","FilePathCheckerModule") import os from time import sleep os.chdir("C:\\Users\\user\\Desktop\\제목 추가\\") # r"C:\Users\user\Desktop\\제목 추가\\"로도 작동 성공함 for i in os.listdir(): hwp.Open(os.path.join(os.getcwd(), i)) sleep(0.2) # 문서 객체 가져오기 --- 일코 doc = hwp.XHwpDocuments.Item(0) # 전체 경로에서 파일명 추출 --- 일코, GPT full_path = doc.FullName file_name = os.path.basename(full_path) # 커서를 원하는 위치로 이동 (예: 문서 맨 처음) --- GPT hwp.HAction.Run("MoveTopLevelBegin") # 파일명 입력 (타이핑) --- GPT hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet) hwp.HParameterSet.HInsertText.Text = file_name hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet) # 엔터를 3번 치기 --- GPT for _ in range(3): hwp.HAction.Run("BreakPara") hwp.Save() hwp.Clear(1)
learner
2024-10-30T04:40:48.814Z
댓글 0
좋아요 2
조회수 228
해결됨
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요. [18]에서 level을 5에서 6으로 변경한 것 아닌가요? 결과가 5가 나오는 이유를 모르겠습니다.
python 머신러닝 빅데이터 pandas 빅데이터분석기사
강민균
2024-10-30T04:14:05.981Z
댓글 1
좋아요 0
조회수 87