2009-05-27 2 views
5

오래 전에 나는 등록 된 사용자 인 것처럼 모든 것을 사용할 수있는 웹 사이트 (불행히도 주소를 잃어 버렸습니다. 신문 사이트의 일부였습니다)를 만났습니다. 기사를 평가하고, 좋아하고 논평 할 수 있으며, 그렇게하면 기사가 저장되도록 웹 사이트에 등록해야한다는 신중하고 임베디드 메시지가 표시됩니다. 그렇다면 당신의 프로필이 어떻게 보이는지 당신이 볼 수있는 링크가 있었고, 저의 모든 활동이 그곳에 있다는 것을보고 놀랐습니다. 내가 읽고 읽은 기사, 의견 등. 나는 사이트를 떠났고 나중에 호기심에서 돌아 왔을 때 여전히 내 활동을 저장했다.Rails에서 이러한 종류의 점진적 참여/지연 등록을 어떻게 구현합니까?

나는 그것이 지금까지 가장 위대한 일이라고 생각했고, 이제 나는 사회적 특징을 가진 웹 사이트를 만드는 과정에 있으며, 나는 그 접근법을 또한 사용하고자한다. 그러나 나는 아직도 많은 멍청한 놈이다. 그래서 나는 그것에 대해 갈 방법에 관해서 많은 단서를 가지고 있지 않다. 어떻게 할 수 있습니까?

답변

8

나는 자동으로 적절하게 무작위로 고유 한 문자열을 포함하여 데이터베이스에 저장해야 등을 처음으로 마음에 드는 사이트를 방문하여 추가 사용자, 속도의 첫 번째 항목의 Profile 생성되는 Profile 모델을 만들 것입니다 . 이 문자열은 클라이언트 측에 쿠키로 저장 될 수 있으며 나중에 프로필을 검색하는 데 사용됩니다. 무작위로 길어야 쿠키를 쉽게 조작 할 수 없으며 다른 익명 사용자의 프로필을 얻을 수는 없지만 완전히 피할 수있는 것은 아닙니다 (익명 프로필에 중요한 데이터를 저장하지 않도록 조심하십시오!).

사용자가 등록하면 Profile 레코드를 새로운 User 레코드와 연결하고 쿠키와 고유 문자열 식별자를 제거 할 수 있습니다. 이제 User 레코드를 기반으로 로그인 할 때 프로필을 검색 할 수 있습니다.

Profile 모델에는 저장하려는 정보가 포함될 수 있습니다.

등록 된 사용자와 익명 사용자를 구별하려면 AnonymousProfile 모델과 Profile 모델 (각각 속성이 다름)을 만들고 누군가가 등록 할 때 익명 프로필의 모든 데이터를 사용자 프로필로 복사하면됩니다. .

업데이트 :. 당신은 단지 사용자가 로그인이 정보를 사용하도록 결정할 수 있습니다 당신은 현재 사용자를 잡고 before_filter을 정의하고, 실제 사용자가 로그인있을 경우에만, 할 수있는 응용 프로그램 전반에 걸쳐 컨트롤러 액션에

class ApplicationController < ActionController::Base 
    before_filter :fetch_user_data 

    def fetch_user_data 
    @current_user = ... # Work your magic to get current user 
    end 

    private 

    def current_profile 
    @current_user and @current_user.profile # Use profile association 
    end 
end 

어딘가에 : 당신은 프로파일 데이터를 사용

if current_profile 
    # Do stuff with current_profile 
    # Only available to registered users... 
end 

당신은 나중에 current_profile의 구현 경우를 변경할 수 있습니다 당신은 당신의 마음을 바꾸고 당신의 익명 사용자들에게 익명의 프로필을 적용하기를 원합니다.

+0

감사합니다. 그러나 실제로 사용자가 등록 될 때까지 웹 사이트에 활동을 적용하지 않는 것이 어떻습니까? 이 질문이 어리석은 질문이라면 미안하지만 대답은 분명하지 않습니다. –

2

사용자를 식별하는 유일한 방법은 쿠키를 사용하는 것입니다. 사용중인 사이트가 다음과 같은 작업을 수행하고 있습니다.

처음으로 사용자가 '사용자'테이블에 항목을 만들고 'guests'그룹에 추가합니다. 나중에 사용자가 다시 볼 수 있도록 식별자 쿠키를 사용자 시스템에 저장하십시오.

사용자가 등록하기로 결정한 경우 사용자 테이블의 나머지 세부 정보를 채울 수 있습니다 (사용자 세부 정보 및 사용자 이름/비밀번호 등의 등록 세부 정보를위한 별도의 테이블을 원할 수도 있습니다). 등록 된 사용자 그룹에 등록하십시오.

그룹을 관리하는 방법은 데이터베이스의 플래그처럼 간단 할 수 있습니다.

이것은 레일의 문제이기 때문에 ... 나는 아마 당신의 application_controller.rb에 before_filter이 대부분을 처리 할

. 다음과 같은 단계가 있습니다 :

if has_cookie 
    @user = lookup_user 
else 
    @user = create_new_guest_user 
end 

기존의 인증 프레임 워크 중 하나 (act_as_authenticated 또는 clearance)를 쉽게 확장 할 수 있습니다.

+0

답변을 주셔서 감사합니다. 매우 유망한 것으로 들립니다. 예를 들어, restful_authentication에 익숙하지는 않지만 그룹을 관리하는 것이 데이터베이스의 플래그처럼 간단 할 수 있기 때문에이 권한을 사용하여 게스트의 활동이 등록 될 때까지 저장되는 것을 방지 할 수 있다고 가정합니다. 권리? 내 말은, 그것은 애플 리케이션/플러그인의 역할 및 권한 부분에서 수행해야 할 일이라고 추측합니다. –

+0

저장하려면 웹 사이트에 실제로 영향을줍니다. 예를 들어 투표가 집계되지 않거나 사용자가 등록 할 때까지 실제로 나타나지 않는 의견입니다. –

관련 문제