2012-11-22 7 views
3

내 사용자 로그인을 위해 Devise with Rails를 사용 중입니다. 그것은 모든 위대한 작품, 그러나, 나는 특정 리디렉션 작업을 얻을 수 없습니다.Rails 로그인 후 리다이렉트

나는 레일을 처음 사용하기 때문에 내가하는 일이 올바른 방법이 아닐 수 있습니다.

예를 들어, 사용자가 게시물을 좋아하도록 허용하고 있습니다. 그러나 그렇게하려면 로그인해야합니다. 나는 '같이'라는 내 컨트롤러에서 작업을 만든 컨트롤러하여 로그인 페이지가 표시되고 입력 한 유증 필터

before_filter :authenticate_user!, :except => [:index, :show] 

있습니다. 일단 사용자가 로그인하면 내가 좋아하는 게시물로 다시 리디렉션하고 싶습니다. '좋아요'라는 작업이 호출되었습니다.

내 컨트롤러는 당연히 내가하지 하드 코드 경로가

def after_sign_in_path_for(resource)  
    #path to somewhere 
end 

after_sign_in_path_for 사용 할 수 있습니다하지만 난 위의 코드에서 그 세션 변수를 사용 아마도 호출 할 수 있습니다 읽었습니다

def like 

    @post = Post.find(params[:id]) 
    @like = Like.new; 
    @like.user_id = current_user.id; 
    @like.post_id = params[:id]; 
    respond_to do |format| 
    if @like.save 
     format.html { redirect_to @post, notice: 'You have like this post' } 
     format.json { head :no_content } 
    else 
     format.html { redirect_to @post, notice: 'Sorry you like was not saved } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
    end 
    end 
end 

처럼 보인다 . Rails의 어느 부분에서 세션 변수를 쓸 수 있습니까? 컨트롤러 동작에서 너무 늦기 때문에 (예를 들어, 같은 동작을하기 전에 장치가 인계 받기 때문에) 뷰에서 설정하는 방법을 볼 수 없습니다.

또한 내 링크는

<%= link_to "Like", {:controller => :posts, :action => :like, :id => @post.id}, {:method => :post } %> | 

PS 새로운 '포스트'를 작성, 사용 리디렉션처럼의 확인 즉 사용자가 로그인을 작동하고 새 게시물보기로 리디렉션됩니다 보인다.

도움과 팁을 크게 높이세요. 같은 행동은 특히 POST를 위해 설계 되었기 때문에

감사

답변

3

는이 작업을 경험하고 있습니다. 따라서 사용자가 해당 URL에 POST 전에 로그인되어 있는지 확인하고 세션과 그 일을하는 것은 까다 롭습니다해야합니다 before_filter

  • 에서 제외하여

    • 당신은 방법처럼 보호를 해제해야 할 것 user_signed_in? (당신을 마음이 헬퍼 방법) 경우, 다음, 수동
    • 을 확인 (사용하기 쉬운 경우 하지 로그인), 당신이 세션에서 좋아하고 무엇을 숨기고 반환 URL
    • 을시와 로그인 페이지로 리디렉션 이 방문을 방문한 사용자는 UR L (GET이고 POST이 아님), 세션 정보를 검색하여 원래 Like가 수행 한 작업을 수행해야합니다 (하지만 사용자가 로그인 할 때까지).

    이 춤의 모든 요청을 얻을 로 끝나는 것을보고, 왜 처음에 쿼리 문자열에 GET 요청뿐만 아니라 패스 매개 변수에 대한 조치 작업을 같이하지? Like는 before_filter에 의해 보호되어 있기 때문에 0 번 코드 변경이 필요하며 보안 위협에 노출되지 않습니다.당신은 귀하의 <a> 태그에 rel="nofollow"을 사용하여 귀하의 Like 링크가 검색 엔진 다음에 오지 않도록해야합니다.

    관련 토론은 redirect_to using POST in rails을 참조하십시오. 거기에 제안 중 하나는 자바 스크립트를 통해 클라이언트에 양식을 작성하여 제출하는 것입니다. 사용자가 인증되면 반환 URL보기에서이를 수행해야합니다.

    응용 프로그램 컨트롤러에 이동 :

    # after login redirect 
    after_filter :store_location 
    
    def store_location 
        # previous url save when its not a admin or user url 
        session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/ || request.fullpath =~ /\/admin/ || request.fullpath =~ /\/admin\/login/ || 
        request.fullpath =~ /\/login/ 
    end 
    

    최고의 이것은 당신과 같은 조치가 (이는 REST의 원칙을 위반)

  • +0

    답장을 보내 주셔서 감사합니다, 나는 그것을 'RESTful'방식으로하고 싶습니다, 그러나, 당신이 제안하고 내가 알고있는 비트를 변경했지만 그게 나에게 오류를주고있다 "ActiveRecord : : RecordNotFound in PostsController # show "- i 변경된 "자원 : 게시물 얻을 '같은', : on => : 컬렉션 끝"및 또한 얻을 link_to. – Dudedolf

    0

    이 해결하기 쉬운 GET로 노출있는에 당신이 반대하면 가장 좋은 타협 수 있습니다 안부 marcello

    관련 문제