2015-02-02 3 views
1

Rails API를 개발하고 Devise를 사용하여 인증합니다. curl 명령을 통해 로그인 및 체크 아웃을 테스트하고 있습니다.레일즈 : API - Devise : 로그인 한 경우에도 current_user return nil

current_user는 (curl 명령을 사용하여) 로그인 한 경우에도 다른 컨트롤러에서 항상 nil을 반환합니다.

컬 명령 :

Sign in :   
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST http://localhost:3000/api/v1/sessions -d "{\"user\":{\"email\":\"[email protected]\",\"password\":\"secret123\"}}"  

로그인 아웃 : 컬 -v -H '콘텐츠 유형 : 응용 프로그램/JSON'-H '수락 : 응용 프로그램/JSON을'? 삭제 -X http://localhost:3000/api/v1/sessions/ \ AUTH_TOKEN \ = JRYodzXgrLsk157ioYHf

+0

사용중인 cURL 명령을 게시하십시오. –

+0

로그인 : curl -v -H '콘텐츠 유형 : application/json'-H '허용 : application/json'-X POST http : // localhost : 3000/api/v1/sessions -d "{\" "password123" "}" 로그 아웃 : curl -v -H 'Content- 유형 : application/json '-H'승인 : application/json '-X DELETE http : // localhost : 3000/api/v1/sessions/\? auth_token \ = JRYodzXgrLsk157ioYHf –

+0

레일스가 " "라고 말합니다. 요청에 서버가 로그인 할 때 보낸 쿠키가 포함 된 경우입니다. cURL에 쿠키를 기록하고 후속 요청과 함께 보내도록 알릴 필요가 있습니다. 'man curl'의'--cookie-jar' 옵션을보십시오. –

답변

0

귀하의 접근 방식이 올바르지 않다고 생각합니다. Devise의 current_user 메소드는 사용자가 로그인했는지 여부를 나타 내기 위해 브라우저에 저장된 쿠키에 따라 다릅니다.

각 사용자에 대한 토큰을 생성하고 각 요청과 함께 보내는 방법을 사용하는 것이 좋습니다. 사용자 전자 메일 및 암호를 사용하는 인증 끝점을 만들 수 있고 자격 증명이 유효한 경우이 사용자에 특정한 토큰을 생성합니다. 그런 다음 사용자 로그인이 필요한 모든 요청에서이 매개 변수를 다른 매개 변수와 함께 보내야합니다.

간단한 구현을 위해 #352 Securing an API - Railscasts (조금 오래되었지만 여전히 유효)을 확인할 수 있습니다.

더 안전한 해결책을 찾으려면 Doorkeeper gem을 확인하십시오.

관련 문제