Languages/Ruby or Rails2008.07.29 09:06
Openid를 사용한 로그인 기능을 Rails를 사용하여 구현하면 굉장히 간단히 구현가능한 것으로 알려져 있습니다. http://www.aproxacs.com/122 를 보면 잘 알수 있는데요, 그런데 시키는대로 따라하다보면 뭔가 이상한 문제들이 한두가지 생기는 것을 발견할 수 있습니다.

Web Password 팝업 창이 뜬다

http://www.aproxacs.com/122 이 글에 나온 대로 구현을 하다 보면, application controller (application.rb) 를 변경해서 login_required를 before_filter로 적용하는 부분을 볼 수 있습니다. 그 의미인 즉슨 login이 안된 상태에서 action을 실행하려고 하면 (sessions 컨트롤러의 메소드들은 제외) 전부 login 창으로 redirection 되도록 만들기 위함인데, 문제는 IE 상에서 가끔 sessions 컨트롤러의 액션이 아닌 다른 액션에 접근하려고 해 보면, Openid로그인창으로 redirection이 되는게 아니라, Web Password 팝업 창이 떠버린다는 점입니다.

이 문제는 lib/ 디렉터리 아래에 있는 authenticated_system.rb 파일에 정의되어 있는 다음 메소드 때문에 발생합니다.

    def access_denied
      respond_to do |format|
        format.html do
          store_location
          redirect_to new_session_path
        end
# bjlee:
# block following 3 lines to remove annoying 'Web Password' Popup
# is displayed on the screen especially for IE.
#
#        format.any do
#          request_http_basic_authentication 'Web Password'
#        end

      end
    end

이 문제를 가장 '간단하게' 해결하려면, 위에서 보는 것 처럼 format.any do 부터 end까지를 comment 처리해주면 됩니다. (물론, 그다지 바람직한 해결책이라고는 볼 수 없습니다만...)

로그인 후에 로그인 전에 마지막으로 방문했던 페이지로 돌아가지 못한다

보통 사람들이 기대하는 것이, 로그인이 되고 나면 그 전에 마지막으로 보고 있었던 페이지로 돌아가는 것일텐데요. http://www.aproxacs.com/122 에 나온대로 해 두고 따라해 보면 그 이전 페이지로 돌아가려다가 메소드가 없다느니 객체가 nil이라느니 하는 등등의 오류 메시지가 뜰 때가 있습니다.

그것은 app/controllers/sessions_controller.rb 파일에 있는 successful_login 메소드에 포함된 오류 때문입니다. 다음과 같이 수정하면 해결됩니다.

    def successful_login
        if params[:remember_me] == "1"
            self.current_user.remember_me
            cookies[:auth_token] = {
                :value => self.current_user.remember_token ,
                :expires => self.current_user.remember_token_expires_at
            }
        end
        if ( session[:return_to] != nil )
            redirect_to session[:return_to]
        else
            redirect_to( '/' )
        end
    end

적색으로 표시한 부분이 수정한 부분입니다.



신고
Posted by 이병준

소중한 의견, 감사합니다. ^^