Server Side JavaScript

Multi user (다중 사용자)

intro(소개)

register(회원가입)

authentication(인증)

댓글

댓글 본문
작성자
비밀번호
  1. ㅠㅠ
    유툽에는 이게 빠져잇네요
  2. whoisy
    토픽 프로그램과 다중 사용자 시스템을 하나로 합쳤습니다.
    그러다 보니 로그인한 상태와 사용자 이름 표시를 모든 템플릿에서 접근하기 위해 다음과 같이 코드를 추가했습니다.

    // 세션에서 로그인한 사용자의 이름을 res.locals 에 저장하는 미들웨어
    app.use(function(req, res, next){
    if(req.session.displayName) // 세션에 사용자 이름이 있을 때
    res.locals.whoami = req.session.displayName;
    next();
    });
    // res.locals 로 변수를 저장하면 템플릿 렌더링할 때 변수를 넘겨 주지 않아도 사용이 가능하다.

    // jade 문서의 상단 메뉴에 로그인, 회원 가입 버튼 처리

    if whoami
    a(href="/auth/profile")
    span.glyphicon.glyphicon-user
    |   #{whoami} 님
    li
    a(href="/auth/logout")
    span.glyphicon.glyphicon-log-out
    |   로그아웃
    else
    li
    a(href="/auth/login")
    span.glyphicon.glyphicon-log-in
    |   로그인
    li
    a(href="/auth/register")
    span.glyphicon.glyphicon-check
    |   회원가입
  3. github에 있음
    대화보기
    • ㅈㅇㅈ
      다중사용자 시스템은 어떻게 바뀌는가?
      사용자로부터 회원가입을 받아서 서비스에 등록하는과정
    • 감사합니다
    • heracles
      강의 감사합니다.
    • hokisimi@hanmail.net
      login에서는 다중사용자이기 때문에 users배열의 모든 사용자정보를 비교해야했습니다.
      그러기 위해서 for문을 사용했죠. for문은 반복문이기 때문에 해당 유저를 찾았으면 더 이상 반복하지 않고
      끝내야 합니다. 그래서 return을 사용한거죠. 그렇치 않으면 for문이 종료되고 나서 who are you 코드가 실행될겁니다.

      register에서 그리고 이전 세션 강좌에서 return이 없는 이유는 굳이 그 부분에서 함수를 종료시켜 빠져나올 필요가 없었기 때문입니다. return으로 빠져 나와도, 빠져나오지 않아도 그 아래에서 실행되어지는 코드가 없는거죠.

      return은 함수가 종료되면서 전달하고 싶은 값을 돌려주는 명령어입니다.
      대화보기
      • JustDoIt
        이고잉님, 강의 잘 보고 있습니다:) 감사합니다
        한가지 질문을 하자면

        post('/auth/login')에서 는 return 을 하고 세션 저장을 하셨는데
        post('/auth/register')에서는 return을 안하셨습니다. 그런데도 잘 등록이 되고 웰컴페이지로
        잘 리다이렉트 됩니다. register에서 리턴을 안하신 이유가 있는지요..?
        덧붙이자면, 이전 세션 강좌에서는 post login에서도 return이 없었는데 이유가 궁금합니다:)
      • yooin14
        전역 배열 변수에 데이터는 브라우져를 새로 고치거나 다른 페이지로 가면 다시 초기화 되요. 유저 로긴여부는 Session Data 로 로긴 상태를 정하는거구요. 원래 전역 배열변수로 유저 가입을 저장하는게 아니에요. 하지만 이수업에 본래 목적은 egoing 님이 말한것처럼 복잡성을 우선 제외하고 로긴부분인 수업을 집중한거에요.
        대화보기
        • 초초초초보
          supervisor를 써서 그런것 같습니다(메모리 초기화? 이뤄짐).

          node로 바꾸면 배열 여러개 들어갑니다.
          대화보기
          • kimaro45
            저도 같은 문제가 있었는데

            var users = [
            {
            username:'egoing',
            password:'111',
            displayName:'Egoing'
            }
            ];

            이걸 변수 선언부(var app = express() 밑에 쯤)로 빼니 해결되네요.
            아마 로그아웃 되고 다시 등록되는 과정에서 users가 다시 생성되서 두 개까지만 들어간 것 같아요...
            대화보기
            • KS Hwang
              이번 강의 하다가 의문이 있어서요~
              2번 째 동영상을 따라하는데 users.push(user) 때문에 배열에 유저들이 저장되는 건 알겠는데, 왜 배열이 2개 이상 안 만들어 질까요?

              예를들어,

              [{"username":"egoing","password":"111","displayName":"Egoing"},{"username":"aaa3","password":"","displayName":"aaa3"}]

              까지 입력은 되는데, 또 register 하면
              [{"username":"egoing","password":"111","displayName":"Egoing"},{"username":"bbb","password":"bbb","displayName":"bbb"}]

              와 같이 2번째 것이 사라집니다 ... ㅠㅠ

              2번 째 계정으로 로긴도 안되구요..

              아마 뒤로가기 하면 배열에 저장이 안 되는것 같습니다

              어떻게 문제일까요??
            • 디미몬
              강의 잘보고 있습니다. 많은 도움이 되고 있어요.

              제가 이 강의 실습을 따라하면서 2가지 문제점이 발생했는데..
              1. 로그아웃부분에서
              delete req.session.displayname은 작동이 잘 안되네요
              req.session.destroy()를 사용해야 작동합니다. 왜 그런가요?

              2. register에서 데이터를 입력하고 전역 배열 변수에 데이터까지 들어가는데
              새로고침을 하면 코드에 작성해두었던 초기값으로 돌아갑니다 (마치 지역변수처럼)
              혹시 짐작가는 문제점 있을까요?
            • 폭풍감자
              egoing님 잼있는 강의 늘 감사합니다.
              강의 내용을 보면서 따라하다가 이러면 어떨까라는 생각이 드는 부분이 있어서 코멘트를 남기며 질문도 있습니다.

              강의 내용 중 아래의 코드 부분에 displayName를 삭제하고 save를 하는 식으로 logout을 진행하셨는데요.
              app.get('/auth/logout', function(req,res){
              delete req.session.displayName;
              req.session.save(function(){
              res.redirect('/welcome');
              });
              로그아웃시에는 session의 정보를 삭제하는 것이 옳지 않나 라는 들어서 찾아본 결과
              save 말고 delete라던가 regenerate등의 정보가 있더라구요.
              아래의 코드를 수행시키면 기존의 session 값은 사라지고 새로운 sesison 파일이 생성되며 displayname값도 사라지게 됩니다.
              req.session.regenerate(function(err){
              res.redirect('/welcome');
              });
              개인적인 생각으로는
              DB에서 변경(Update) 속도가 빠르다면 전체 값을 초기화 해주는 방법을 찾는게 좋을 것 같으나,
              삭제 생성의 속도도 문제가 되지 않는다면 session에 들어간 모든 값을 초기화 해주는 방법은 아무래도 재생성이 맞는 것 같기도 합니다.
              질문사항
              실제 상용 서버에서는 보통 해당 상황에서는 어떻게 진행하는지요?
              로그인에 관련된 특수한 정보만 지우고 나머지 세션값은 가지고 있는지요?

              단순히 naver를 확인해보니 로그인을 할 경우 cookie에 my.naver.com이라는 값이 새로 생기고 로그아웃의 경우 사라지고 있네요. 허허허 역시 상용서버는 많이 복잡복잡하네요.
            • 열혈수강생
              수업 정말 잘 듣고 있습니다!
              multiuser 수업의 코드를 올려주실순 없나요?ㅜㅜ
            • 많은 도움 감사해요
              찾는 부분은 콜백과 상관 없으므로
              불리언 변수 혹은 i 값 체크해서 처리하면 될 것 같습니다.

              var f = false; // 찾는 루틴 전에 선언.
              for (var i = 0; i < user.lenght; i++) {
              if (아이디, 패스워드가 일치하면) {
              f = true;
              ~~~
              }
              }
              // 밖에서
              if (!f) {
              res.send('who are you?~~~;
              }

              혹은 불리언 변수 선언 없이
              if (i == user.lengh) {
              res.send('who are you?~~~;
              }
              로 해도 되는 듯, 못찾으면 i값이 최종적으로 저 값이 되니까요.
              (이 경우 아이디,패스 찾는 for문의 경우 찾았으면 루프 탈출하는 break문을 추가해야 될것 같아요.)
            • 한아
              다음 영상은 언제나오나요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
            • 그린애플
              egoing님 감사합니다.
            버전 관리
            egoing
            현재 버전
            선택 버전
            graphittie 자세히 보기