2016-08-26 3 views
1

레일즈 데이터베이스에 저장된 사용자/비밀번호 인증 정보를 기반으로 레일즈를 통해 외부 https 사이트에 로그인하고 싶습니다. 싱글 사인온 같은 것. 외부 사이트는 로그인 할 API를 제공하지 않습니다. 로그인 양식. 그들의 문서는 전자 메일과 암호를 양식에로드 한 다음 확인을 눌러 로그인 양식에 자격 증명을 게시 할 수 있다고 말합니다.레일즈에서 외부 사이트에 로그인

하지만 그렇게하면 로그인 폼의 소스 코드를보고 누군가가 로그인 자격 증명을 알아낼 수 있습니다. 나는 기계화하고 여기에 Submitting POST data from the controller in rails to another websiteRails 3 - Log into another site and keep cookie in session과 같은 쿠키를 로딩 보았다지만 옳은 것 같지 않습니다.

컨트롤러에서 자격 증명을 자동으로로드하고 해당 사이트에 로그인하기 위해 즉시 외부 사이트에 게시하는 방법이 있습니까?

고맙습니다.

+0

어이가이 문제를 해결하기 위해 당신이 할 수 있었다? 그렇다면 어떻게 말해 주실 수 있습니까? – Raza

+0

나는 할 수 없었다. 일단 로그인 양식을 제공하고 나면 로그인 할 때 프로그래밍 방식으로 사용자 이름/비밀번호를 입력하고 자바 스크립트로 양식을 적재해야합니다. 관련된 API가 없기 때문에 솔루션이 다소 손상되었습니다. –

+0

글쎄, 기계 장치를 통해이 작업을 수행 할 수있었습니다. – Raza

답변

2

저는 Oauth2를 사용합니다. 좋은 래퍼가 있습니다 : https://github.com/intridea/oauth2

+0

감사하지만 외부 사이트는 로그인에 사용할 API를 제공하지 않습니다. 그들은 로그인 할 수있는 http 로그인 양식 만 가지고 있습니다. –

0

기계화를 통해이 작업을 수행 할 수있었습니다. HTTPS를 사용하는 예를 들어 페이스 북의 경우, 코드 내 user_controller.rb에서

아래와 같습니다

def face_book 
    @website = 'https://www.facebook.com/login.php?login_attempt=1&lwv=110' 
    agent = Mechanize.new 
    agent.log = Logger.new "mechanize.log" 
    agent.user_agent_alias = 'Mac Safari' 
    agent.follow_meta_refresh = true 
    agent.redirect_ok = true 
    login_page = agent.get (@website) 
    login_form = login_page.forms.first 
    email_field = login_form.field_with(name: "email") 
    password_field = login_form.field_with(name: "pass") 
    email_field.value = 'PUT_YOUR_EMAIL_HERE' 
    password_field.value = 'PUT_YOUR_PASSWORD_HERE' 
    home_page = login_form.click_button 
    @blah = agent.get("https://m.facebook.com/") 
    end