210502-TIL

김예지·2021년 5월 2일
0
post-thumbnail

로그인 후 발급받은 코드는 다음과 같은 형식으로 활용이 가능하다.

여기서 확인하는 ID를 통해 회원의 개인정보를 불러올 수 있다.
해당부분은 Scope에서 users:read 권한을 준 다음 확인할 수 있다. 내가 로그인한 아이디를 예로 들면 다음과 같이 활용할 수 있다.

위의 사진과 같이 권한을 주게 되면, 다음과 같은 결과를 얻을 수 있다.

일단 우리는 여기서 이름과 이미지 url 정도만 사용해서 사용자의 프로필을 불러온다고 가정하고 코딩을 해본다.
(라는 글을 쓰고 8시간동안 뻘짓을 한 결과 다음의 코드를 만들 수 있었다.)

@app.route('/login', methods=['GET'])
@cross_origin()
def login():
    receive_code = request.args.get('code')
    get_user_id_url = f'https://slack.com/api/oauth.v2.access?client_id=앱아이디&client_secret=앱비밀번호&code={receive_code}'
    res = requests.get(get_user_id_url)
    res_json=json.loads(res.text)
    user_id=res_json['authed_user']['id']
    
    APP_KEY = 'Bearer 토큰토큰'
    url = f'https://slack.com/api/users.info?user={user_id}'
    req = urllib.request.Request(url, headers={'Authorization': APP_KEY})
    res = urllib.request.urlopen(req).read()
    encoding = urllib.request.urlopen(req).info().get_content_charset('utf-8')
    JSON_object = json.loads(res.decode(encoding))
    
    user_name=JSON_object['user']['profile']['first_name']
    sub_name=JSON_object['user']['profile']['last_name']
    user_img_url=JSON_object['user']['profile']['image_192']
    my_res = make_response(render_template('login.html', user_name=user_name,user_img_url=user_img_url,sub_name=sub_name))
    return my_res

크게 세 파트로 나뉘는데, 맨 위 첫번째 파트에서는 앱의 아이디와 비밀번호, 그리고 아까 유저의 code를 넣고 유저의 아이디를 가져온다. 기본 로그인 유효기간이 10분이라고 되어있는 것 같았는데, 테스트할 때도 마찬가지로 10분이 지나면 코드가 만료되어 새로 발급받아야했다.
두번째 파트에서는 유저의 아이디를 통해서 user.info API를 호출해서 이름과 프로필 이미지를 가져온다.
그리고 login.html 페이지에 정보를 넘겨준다.

보기에는 간단해보이는 코드가 왜 시간을 많이 소요했냐면, 일단 기본적으로 ajax를 사용해야한다고 생각했는데 CORS에러가 해결이 불가능했다. 아직도 저 에러가 뭔지는 잘 모르겠는데, 일단 우리는 클라이언트로 slack의 서버로 요청을 전송하기 때문에, slack에서 cors 설정을 따로 해주지 않는 이상은 ajax에서는 해결할 법이 없다고 쓰여있었다. 그래서 파이썬에서 requests를 사용하여 테스트를 해봤는데, 예상 외로 이건 또 잘되더라. 물론 이것도 cors 설정은 해주긴 했지만, 어차피 둘다 클라이언트인데 왜 ajax에서는 안되고 python에서는 되는지 아직 잘 모르겠다.
시간날때 다시 정리해서 찾아봐야 할 것 같다.
일단은 로그인페이지에서 프로필을 간단하게 부트스트랩을 따와서 다음과 같은 화면을 슬랙으로부터 연동시킬 수 있었다.

아티클이고 팔로워고 다 가짜 숫자다. 가져온건 사진이랑 이름이랑 기수.
눈물의 주말의 이틀간의 사투가 거의 끝나간다.
다음 스터디 전까지는 해당 소스코드를 조금 더 예쁘게 만들어서 팀원들에게 간단히 설명할 방법을 찾아야하고, git에 올리고 적용 방법을 간단히 브리핑하는 연습을 해야겠다.

profile
새싹

0개의 댓글