묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
Next에서 자동 로그인 구현
안녕하세요 😃 현재 Next.js 사용해 프로젝트 진행중인데 한번 로그인하면 웹에 재접속 시 자동으로 로그인 처리되도록 하고 싶습니다. 현업에서는 어떤 방식으로 진행하는지 궁금합니다! 답변 주시면 정말 정말 감사합니다!!
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
requests 라이브러리를 활용한 쿠팡 로그인 가능 여부
안녕하세요.쿠팡에서 제가 주문한 주문내역을 크롤링하고 싶은데, 우선 로그인이 필요하겠더라구요.로그인 화면 URL은 https://login.coupang.com/login/login.pang 이고,주문 내역 URL은 https://mc.coupang.com/ssr/desktop/order/list 인데,제가 아는 모든 방법을 동원해도 session.post 요청을 날리면 무한로딩에 빠져버리네요..강사님께서는 requests 라이브러리를 이용한 쿠팡 로그인이 가능한 지 여쭤봅니다.제가 작성한 코드를 아래 남깁니다.import requests login_url = "https://login.coupang.com/login/login.pang" user = 'EMAIL' password = 'PASSWORD' login_data = dict() login_data['email'] = user login_data['password'] = password header = { 'Host': 'www.coupang.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3', } with requests.Session() as session: res = session.post(login_url, data = login_data, headers=header) url_order = 'https://mc.coupang.com/ssr/desktop/order/list' res = session.get(url_order) print(res.content)
-
해결됨스프링 시큐리티 OAuth2
로그아웃 시, 토큰 만료 처리
로그아웃 시, 토큰 만료 처리로그아웃 할 때, 토큰 무효화를 확실히 하기 위해 oauth2_authorization 테이블에 있는 액세스 토큰과 리프레시 토큰을 만료 시키고 싶은데 맞는 방법인지 모르겠습니다.로그아웃url 뒤에 쿼리로 액세스 토큰, 리프레시 토큰 받아와 커스텀한 logoutHandler에서 OAuth2AuthorizationService 호출하여 토큰 유효기간을 업데이트 하여 무효화하긴 했는데 위 방법처럼 DB의 oauth2_authorization 테이블을 직접 업데이트쳐서 토큰을 무효화 해도 되는것인지, Spring boot 내에서 왜 로그아웃할 때 토큰 유효기간을 만료시키지 않는 것인지 궁금합니다. 로그인 시, 세션 인증 정보 저장그리고 로그인할 때 OAuth2AuthorizationServerConfigurer내부에서 세션에 인증 정보(유저명, 인증여부 등)담고 있는데 인증서버를 여러 대 구성할 경우, 문제가 없을지? redis를 사용해야할지 궁금 합니다.oauth2는 토큰발급하여 인가하는데 왜 세션에 인증정보를 저장하여 사용하나요?
-
미해결
구글 로그인이 정말 몇일째 작동하지 않습니다 ㅠㅠ...
@Service public class CustomOAuth2LoginSuccessHandler implements AuthenticationSuccessHandler { private static final Logger logger = LoggerFactory.getLogger(AuthController.class); @Autowired private CustomOAuth2UserService customOAuth2UserService; @Autowired private OAuth2AuthorizedClientService authorizedClientService; @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { logger.info("Authentication Success - Principal: {}", authentication.getPrincipal()); OAuth2AuthenticationToken authToken = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = authToken.getPrincipal(); OAuth2AuthorizedClient authorizedClient = authorizedClientService .loadAuthorizedClient(authToken.getAuthorizedClientRegistrationId(), authToken.getName()); if (authorizedClient != null) { OAuth2UserRequest userRequest = new OAuth2UserRequest(authorizedClient.getClientRegistration(), authorizedClient.getAccessToken()); customOAuth2UserService.processOAuth2User(oAuth2User, userRequest); } // 인증 후 리디렉션 또는 추가 로직 구현 response.sendRedirect("/home"); // 예시로 '/home'으로 리디렉션 } }@Service public class CustomOAuth2UserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> { private static final Logger logger = LoggerFactory.getLogger(CustomOAuth2UserService.class); @Autowired private MembersRepository membersRepository; @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { logger.info("loadUser1"); try { OAuth2UserService<OAuth2UserRequest, OAuth2User> delegate = new DefaultOAuth2UserService(); OAuth2User oAuth2User = delegate.loadUser(userRequest); logOAuth2UserInfo(oAuth2User); // 로그 출력 processOAuth2User(oAuth2User, userRequest); return oAuth2User; } catch (Exception e) { logger.error("Error loading OAuth2User", e); throw e; } } private void logOAuth2UserInfo(OAuth2User oAuth2User) { logger.info("OAuth2User Attributes: {}", oAuth2User.getAttributes()); if (oAuth2User.getAttribute("email") == null) { logger.warn("OAuth2User does not contain email attribute"); } } @Transactional public void processOAuth2User(OAuth2User oAuth2User, OAuth2UserRequest userRequest) { String email = oAuth2User.getAttribute("email"); String name = oAuth2User.getAttribute("name"); logger.info("Processing user - Email: {}, Name: {}", email, name); Optional<MembersEntity> existingMember = membersRepository.findByEmail(email); MembersEntity member; if (existingMember.isPresent()) { member = existingMember.get(); member.updateFromGoogle(name, email); logger.info("Updated existing user: {}", email); } else { member = MembersEntity.builder() .email(email) .name(name) .nickname(name + "_google") .role(Role.ROLE_CUSTOMER) .build(); logger.info("Saving new user: {}", email); } try { membersRepository.save(member); logger.info("User saved/updated successfully: {}", email); } catch (Exception e) { logger.error("Error saving/updating user: {}", email, e); } membersRepository.save(member); } } @RestController public class LoginController { private static final Logger logger = LoggerFactory.getLogger(AuthController.class); @GetMapping("/login/oauth2") public void redirectToLoginPage(HttpServletResponse response) throws IOException { // OAuth2 로그인 페이지로 리디렉션 logger.info("리다이렉트"); response.sendRedirect("/oauth2/authorization/google"); } }
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 비즈니스 로직을 원 쿼리로 하지 않는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요.스프링 MVC 2편 - 섹션6. 로그인 처리1 중 로그인 기능 강의를 수강하다가 구현 방법에 대해 궁금한 점이 생겨 질문 드립니다.강의 3:49초 부분에서 로그인 핵심 비즈니스 로직을 2단계의 과정으로 나누고 이를 코드로 작성하는 것을 학습했습니다.입력 받은 loginId와 일치하는 회원 정보가 있는 지 DB에서 조회한다loginId로 DB에서 조회한 회원 정보의 password와 입력 받은 password를 비교하여, 일치하는 회원 정보를 찾는다public Member login(String loginId, String password) { return memberRepository.findByLoginId(loginId) .filter(m -> m.getPassword().equals(password)) .orElse(null); }강의의 로직은 잘 이해하였지만,일종의 원 쿼리라고 부르는 방식으로, 한 번에 해결할 수 있을텐데, 왜 2단계로 나누어 해결하는 지 이유가 궁금합니다.강의에서는 메모리를 DB로 사용했지만 일반적인 DB를 사용한다고 가정했을 때,제가 생각한 방법은MemberRepository에 public Optional findByLoginIdAndPassword(String loginId, String password) 메서드를 정의하고loginId와 password가 모두 일치하는 (AND 조건) 회원 정보가 있으면, 그 회원 정보(Member)를 반환일치하는 회원 정보가 없으면 null 반환LoginService에서 리포지토리의 findByLoginIdAndPassword를 호출하기만 하면 되지않을까 생각했습니다.public Member login(String loginId, String password){ return memberRepository.findByLoginIdAndPassword(loginId, password); }이렇게 생각한 이유는입력한 정보와 일치하는 데이터가 DB에 있는 지 확인하기 위해 어차피 DB에 접근이 필요한 상황이고,그렇다면 자바에서 루프를 돌면서 비교하는 것보다 DB에서 WHERE 절을 통해 조건을 비교하는 것이 빠르지 않을까 싶어서 입니다.정답이 있는 건 아니겠지만, 영한님께서 로직을 2단계로 나누어 작성하신 데에는 이유가 있을 것이라 생각해서, 그 이유가 궁금합니다.저는 SI에서 근무를 했었는데, 비즈니스 로직을 모두 쿼리에 녹여내고, 대부분을 원 쿼리로 해결하는 방식의 개발 방법을 익혔었습니다.영한님 강의를 들으면서 이게 좋지 않은 방법이란 것을 알게 되었고, 보다 객체지향적으로 설계하고 개발할 수 있도록 노력하고 있습니다.그래서 로그인 로직에서도 원 쿼리보다는, 강의에서와 같이 2단계로 작성하는 것이 더 좋은 방법인 건지 궁금합니다.긴 질문 읽어주셔서 감사합니다. ^^
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
로그인 에러(특이 오류는 없는데 로그인 안되는 현상)
안녕하세요 강사님. 어찌어찌 버전 다른거 어떻게든 찾아서 수정하면서 테스트하고 정상 구동 되는거 확인하고 여기까지 왔는데요. 여기가 정말 오류 해결하기가 너무 빡세서 질문을 남기게 됩니다. 설명으론 이야기 하기가 힘들어서 깃허브 링크를 남기겠습니다. 솔직히 어디가 문제인지 모르겠습니다.감사합니다.https://github.com/fire989/boiler-plate-ko.git
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
[해결 글] 회원가입 DB 연결 오류 해결
결론: 와이파이 가 바뀌면 ip 주소 바뀌니까 mongoDB 에 network access 에 create Ip 해서 새 ip 등록해줬습니다.공용와이파이 일 경우 2시간마다 ip 주소가 바뀌니 편집으로 바꿔보세요 ip4 주소 찾는법 구글링해도 나오고 window 는 cmd(관리자권한 실행) - ipconfig 입력 상황:콘솔창에는 504 게이트 웨이 오류가터미널에는 HRM 로컬호스트 3000 로컬호스트 5000 뭐시기랑app chashed 도 동시에 떳었습니다.HRM 앞줄에는Error: Cannot find module '../models/Product' 이거는 models 에 product 파일 생성하니 사라짐 파일을 아직 만들지는 않았지만 auth.js 파일에서 위 파일을 호출하니 강사님 깃헙 완성코드 에서 ../models/product.js 파일 복붙해주니 해결되었으나또 다음으로 HRM throw er 이런식으로 떠서 HRM 다시뜸 504 gateawqy 발생 npm run dev 는 client 폴더가 아닌 (server 폴더 안에서도 아님!) root 폴더에서 실행하기혹시 클론을 해서 실행시킨다면, root folder > npm install client folder > npm install install을 먼저 하는 것 잊지 않기 위 강의처럼 다른 옵션들 ... dropzone 같은 모듈을 사용했다면 해당 모듈에 대한 install들도 한 번씩 더 해보기 npm install bcrypt --save 다시 시도하기 4-1. bcrypt 버전을 5.0.0 으로 dependencies에서 수정 -> npm install -> npm run 컴퓨터 껐다 키기위에 해결방법 다해도 몽고디비 연결이 안되는 거같아몽고디비에서 새마음으로 처음부터 클러스터, 몽고 uri 사용자 이름, 비밀번호 새로하고 ip 주소 추가해주니모든 에러 사라졌습니다. 저도 매 초마다 떨리는 순간으로 코드 작성하고 run 하고 있습니다. 여러분 모두에게 행운을 빕니다. ^^*
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 시 GetMapping에 @ModelAttribute를 넣어주는이유
안녕하세요 로그인 기능 작성할 때 GetMapping에서도 ModelAttribute를 넣어주는 이유가 혹시 thymeleaf작성시 th:object=${loginForm}을 넣어주기 위해서 작성하는건가요..?? 이 부분이 궁금하여 질문드립니다. 감사합니다.
-
미해결
트위터 로그인 구현
트위터 로그인을 구현하고 싶습니다. 트위터 연동 로그인에 대해서 많이 찾고 있는데 제 능력 부족인지 많은 정보가 나오지 않아서요...카카오 같은 경우 데이터를 요청하는 방법이 간편해서 진행이 됐는데. 트위터 같은 경우 데이터를 못받아오고 있어서요 ㅠㅠ... 질문을 어떻게 올려야할지 모르겠네요... 참고할만한 정보나 구현해보신 분 계실까요 ?
-
미해결CCNA - Cisco Certified Network Associate (200-301) 자격증 과정
시스코 로그인이 되지않습니다
시스코 로그인과 관련해서, 이전에 남겨주셨던 방법으로는 로그인이 되지않는 것 같습니다. Sorry, we can't find a NetAcad account associated with this Cisco account. 확인부탁드립니다.
-
미해결하울의 안드로이드 인스타그램 클론 만들기
페이스북 로그인
페이스북 로그인버튼을 활용하여 실행하면, 페이스북 계정을 올바르게 입력하였음에도 다음과 같이 나타나서 문의드립니다. 코드는 아래와 같습니다. package com.example.howlstagramimport android.content.ContentValues.TAGimport android.content.Intentimport android.content.pm.PackageInfoimport android.content.pm.PackageManagerimport android.os.Bundleimport android.service.controls.ControlsProviderService.TAGimport android.util.Base64import android.util.Logimport android.widget.Toastimport androidx.appcompat.app.AppCompatActivityimport androidx.fragment.app.FragmentActivityimport com.facebook.AccessTokenimport com.facebook.CallbackManagerimport com.facebook.FacebookCallbackimport com.facebook.FacebookExceptionimport com.facebook.login.LoginManagerimport com.facebook.login.LoginResultimport com.google.android.gms.auth.api.Authimport com.google.android.gms.auth.api.signin.GoogleSignInimport com.google.android.gms.auth.api.signin.GoogleSignInAccountimport com.google.android.gms.auth.api.signin.GoogleSignInClientimport com.google.android.gms.auth.api.signin.GoogleSignInOptionsimport com.google.firebase.auth.FacebookAuthProviderimport com.google.firebase.auth.FirebaseAuthimport com.google.firebase.auth.FirebaseUserimport com.google.firebase.auth.GoogleAuthProviderimport kotlinx.android.synthetic.main.activity_login.*import java.security.MessageDigestimport java.security.NoSuchAlgorithmExceptionimport java.util.*class LoginActivity : AppCompatActivity() { var auth : FirebaseAuth? = null var googleSignInClient : GoogleSignInClient? = null var GOOGLE_LOGIN_CODE = 9001 var callbackManager : CallbackManager? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) auth = FirebaseAuth.getInstance() email_login_button.setOnClickListener { signinAndSignup() } google_sign_in_button.setOnClickListener { //First Step googleLogin() } facebook_login_button.setOnClickListener { facebooklogin() //First Step } var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken("284216010288-9grtncojbd715e2b7ud2mkg47g3nttpj.apps.googleusercontent.com") .requestEmail() .build() googleSignInClient = GoogleSignIn.getClient(this,gso) printHashKey() callbackManager = CallbackManager.Factory.create() } fun printHashKey() { try { val info: PackageInfo = packageManager .getPackageInfo(packageName, PackageManager.GET_SIGNATURES) for (signature in info.signatures) { val md = MessageDigest.getInstance("SHA") md.update(signature.toByteArray()) val hashKey = String(Base64.encode(md.digest(), 0)) Log.i("TAG", "printHashKey() Hash Key: $hashKey") } } catch (e: NoSuchAlgorithmException) { Log.e("TAG", "printHashKey()", e) } catch (e: Exception) { Log.e("TAG", "printHashKey()", e) } } fun googleLogin(){ var signInIntent = googleSignInClient?.signInIntent startActivityForResult(signInIntent,GOOGLE_LOGIN_CODE) } fun facebooklogin(){ LoginManager.getInstance() // public profile과 email을 가져옴 .logInWithReadPermissions(this, Arrays.asList("public_profile","email")) LoginManager.getInstance() // 로그인 성공시 가져오게 되는 부분. .registerCallback(callbackManager, object : FacebookCallback<LoginResult> { override fun onSuccess(result: LoginResult?) { // Second Step handleFacebookAccessToken(result?.accessToken) //로그인 성공시 데이터를 firebase로 } override fun onCancel() { } override fun onError(error: FacebookException) { } }) } fun handleFacebookAccessToken(token : AccessToken?){ var credential = FacebookAuthProvider.getCredential(token?.token!!) auth?.signInWithCredential(credential) // firebase로 정보를 넘기는것. google과 동일 ?.addOnCompleteListener { task -> if (task.isSuccessful) { //login //Third Step 응답값을 받아서 정리한다. moveMainPage(task.result?.user) } else { //show the error message Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show() } } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) callbackManager?.onActivityResult(requestCode, resultCode,data) if(requestCode == GOOGLE_LOGIN_CODE){ var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data) if(result.isSuccess){ var account = result.signInAccount //second step firebaseAuthWithGoogle(account) } } } fun firebaseAuthWithGoogle(account : GoogleSignInAccount?){ var credential = GoogleAuthProvider.getCredential(account?.idToken,null) auth?.signInWithCredential(credential) ?.addOnCompleteListener { task -> if (task.isSuccessful) { //login moveMainPage(task.result?.user) } else { //show the error message Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show() } } } fun signinAndSignup(){ // 회원가입 하는 코드 auth?.createUserWithEmailAndPassword(email_edittext.text.toString(), password_edittext.text.toString()) ?.addOnCompleteListener { task -> if(task.isSuccessful){ //creating a user account moveMainPage(task.result?.user) }else if(task.exception?.message.isNullOrEmpty()){ //show the error message Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show() }else{ //login if you have account signinEmail() } } } fun signinEmail(){ auth?.signInWithEmailAndPassword(email_edittext.text.toString(), password_edittext.text.toString()) ?.addOnCompleteListener { task -> if (task.isSuccessful) { //login moveMainPage(task.result?.user) } else { //show the error message Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show() } } } fun moveMainPage(user:FirebaseUser?){ if(user != null){ startActivity(Intent(this, MainActivity::class.java)) } }}
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
session.getAttribute(SessionConst.LOGIN_MEMBER) 질문
안녕하세요 영한님! 질문드립니다..! 아래와 같이 로그인 시 세션에 로그인 회원정보를 보관하고 //로그인 성공 처리 TODO //세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성 HttpSession session = request.getSession(true); //세션에 로그인 회원 정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); 아래와 같이 세션에서 SessionConst.LOGIN_MEMBER가 key 값으로 session 에서 SessionConst.LOGIN_MEMBER와 매칭되는 value인 Member 객체를 꺼내오는 것으로 이해하고 있는데,, Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER); 위와 같은 로직으로 여러회원이 로그인 할 텐데... 어떻게 하나의 key 값으로 여러개의 Member 객체를 구별 할 수 있는지 궁금합니다...! 감사합니다.!
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
패스포트 로그인 로직에서 문법에 관한 질문이 있습니다
안녕하세요 제로초님 강의 항상 잘 보고있습니다. passport 의 authenticate 매서드를 사용한 후에 23번 라인에 (req, res, next) 를 써주는 이유와 의미가 궁굼합니다 어떤 문법이고 어떤개념인지 전혀 몰라서 검색해볼수도 없는 상황이라 질문 남깁니다. 답변주시면 감사하겠습니다!
-
미해결자바 스프링부트 활용 웹개발 실무용
부트 로그인 화면
스프링 부트를 사용하여 로그인 로직 구현중에 있는데요 최초로그인을 할경우 비밀번호를 변경하고 싶어요 ㅠㅠㅠ 근데 최초로그인을 어떻게 만들어야 되고 어떻게 구현할지 잘모르겠어요 ㅠㅠㅠ 구글링 찾아봐도안나와서 문의 드립니다.
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
도와주세요ㅠㅠㅠ (로그인 쿠키 저장안됨)
안녕하세요. 요즘 열심히 듣고 실습하고 있는데 이 에러때문에 몇시간은 찾아봐도 해결이 안되서 결국 질문 남기네요.. swr버전 업데이트 관련 공지와 다른분의 쿠키관련 질문을 봤지만 해결이 안됩니다.. 도대체 이유를 모르겠습니다. 코드한번만 봐주시면 감사하겠습니다..! 참고로 위에 코드에서 .then(() => { mutate(); }) 이렇게 해도 에러는 똑같이 납니다 로그인 시도했을 때 나오는 에러(Network 탭) (쿠키가 없어요) 회원가입성공은 하는데 회원가입 Network탭에서도 쿠키는 전혀 안보이는데 회원가입했을때 네트워크탭에서도 쿠키가 보여야 하나요? 보여야하는거면 로그인이 아니라 회원가입에서부터 잘못된것인지.. 근데 회원가입 성공할땐 별다른 에러는 없었거든요ㅠㅠ
-
미해결MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React
로그인 로그아웃 관련 새로고침 이슈
한가지 더 해결못한 이슈가 있습니다.새로고침 후 /직전에 구동 잘 되는 걸 확인했던 author 정보의displayName을 읽어올수없다는 TypeError가 뜨네요,그리고 로그인 후 리덕스에서 읽어오는 과정에서 뭔가문제가 있는지 자꾸 react_devtools_backend.js:3973 Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function. at Login (http://localhost:3000/static/js/bundle.js:924:76)이 오류가 뜨네요, 무시해도 되는 것인지 아니면 이번 문제와 연관이 있는지 모르겠습니다. 헷갈리는건 리덕스를 포스트 리스트 페이지에 연동하기 전까지는 무리 없이 잘 됐다가 갑자기 페이지를 새로고침 하니까로그인 관련 이슈가 생겼다는 점입니다.!!제가서버를 구동시킨 상태에서 디테일 컴포넌트에 추가했던 author 정보의 displayName 받아오는 코드를 다시 지웠더니 문제가 사라졌다가 지웠던 코드를 똑같이 다시 쓰니 디테일 페이지가 문제 없이 작성자 정보를 보여주었습니다. <h3>writer:{postInfo.author.displayName}</h3> 그런데 새로고침을 누르자 마자 위의 타입에러가 뜨면서 디테일페이지가 로딩이 1초간 됐다가 흰 화면이 되며 콘솔창에 아래 오류가 뜨는 것입니다. 콘솔창에 문제를 추적하기 위해 제가 아래 디테일 코드에 콘솔로그를 몇군데에 찍어봤는데 로그인 문제와 연관이있는지 서버와 연결은 되지만 위 첨부 콘솔창과 같이 빈 데이터가 넘어오는것 같습니다. 혹시나 해서 다시 "/" 으로 돌아가 로그아웃을 강제로 하고재로그인을 해서 리스트가 있는 페이지로 들어와봤습니다.그랬더니 author 정보는 잘 받아오는데 다음과 같은 콘솔창 오류가 추가되었습니다.일단 저 오류를 무시하고 리스트에 있는 목록을 하나 클릭해 들어가니 역시나 빈 배열이 받아지는 오류가 반복됩니다.분명 새로고침과 관련한 문제인 것 같은데....이상한건 새로고침을 하면 자동 로그아웃이 되어버리는건가 하고 의심해서 "/" 으로 돌아와보면토큰이 넘어와 로그인 상태가 유지중이었습니다.그래도 의심되는건 바로 로그인상태가 표시되는게 아니라 조금 뜸들이다가 로그인이 되었음이 표시되긴 합니다. 판다선생님이라면 어떤 부분을 살펴보실 것 같은가요어떤 부분을 살펴보면 좋을지 알려주시면 확인 후 조치해보고 코드를 첨부해보겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
안녕하세요. 스프링 로그인 유지 관련 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예/2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 들은 학생입니다. 이번에 스프링 인터셉터 - 인증 체크를 듣고 개발을 해보았는데요.김영한 강사님께서 만드신 로그인 세션 기능은 유저 한명일 때 잘 작동하는 것은 알 수 있는데, 궁금한 점은 유저가 여러명일 때는 작동이 잘되는가 라는 점입니다.세션은 서버의 메모리상에서 공유되는데 if( session == null || session.getAttrivute(SessionConst.LOGIN_MEMBER) == null ) .... 위와 같은 코드 부분에서 session이 있다고 하더라도 만약 다른 유저가 이미 로그인 되어 있다면(로그인을 했다면), session과 세션의 SessionConst.LOGIN_MEMBER 키에 대한 값은 이미 존재합니다.따라서 저는 이번에 예시로 작성해주신 로그인 세션 유지 기능이 유저 한명이 일 때만 작동한다고 생각합니다. 아직 제가 많이 부족하고 많이 모자랍니다. 나쁜 의도로 질문한 것이 아니라 너무 궁금하고 아무리 찾아봐도 모두 강사님처럼 코딩을 하셔서 질문남겨봅니다. 항사 강사님께서 쉽고 친절하게 설명해주신 덕분에 쉽게쉽게 스프링을 이해하고 잘 배워갑니다. 감사합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
submit_label 값 변경
선생님, 안녕하세요 :) 로그인 폼과 회원가입 폼의 버튼의 label 변경이 되지 않습니다. 분명 제가 오타를 낸 것 같은데, 아무리 선생님의 예제랑 비교해도 다른 부분을 찾을 수가 없어서 사소한 내용이지만 질문 드립니다. 귀찮게 해드리는 것 같아 죄송해요ㅠㅠㅠㅠㅠㅠ 1. _form.html {% load bootstrap4 %}<form action="" method="post" enctype="multipart/form-data"> {% csrf_token %} {% bootstrap_form form %} {% buttons %} <button type="submit" class="btn btn-primary"> {{ submit_label|default:"Submit" }} </button> {% endbuttons %}</form> 2. login_form.html {% extends "accounts/layout.html" %}{% block content %} <div class="container"> <div class="row"> <div class="col-sm-6 offset-sm-3"> {% include "_form.html" with submit_lable="로그인" %} </div> </div> </div>{% endblock content %} 3. 로그인 페이지 화면
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
회원가입은 되는데, 로그인이 실패합니다.
강사님 안녕하세요, 제공해주신 강의 잘 듣고 있습니다. 감사합니다. 회원가입은 정상적으로 잘 되는데, 로그인이 계속 안되네요. 콘솔창은 깨끗해요 차라리 콘솔창에 뭐가 뜨면 그거 보고 수정할텐데.. 이메일이랑 비밀번호는 복붙도 하고 직접 입력도 해보면서 여러번 시도해본거라 정확히 입력했어요 그런데 아무리 해봐도 로그인은 계속 실패하네요ㅜㅜ 코드가 문제인거면 왜 콘솔이나 터미널은 깨끗한건지.. 오타도 여러번 확인했는데 도저히 못찾겠네요ㅠ 밑에 깃헙주소 첨부하니 확인 부탁드립니다. 감사합니다. https://github.com/Belisy/boiler-plate
-
미해결
소셜 로그인 쉽게 붙이는법
카카오나 네이버같이 소셜 로그인 연동 관련해서 도움 받을 수 있을 만한 곳 있을까요?? SNS 로그인 API 관련 강의는 없네요ㅠㅠ