2009-06-24 3 views
1

Я реализовал authlogic на сайте rails, и я пытаюсь заставить openid работать правильно. Пока вы можете войти в систему просто отлично, пока у вас есть существующая учетная запись, но не так много, если вы этого не сделаете. Я хотел бы иметь возможность автоматически создавать новую учетную запись, если identity_url еще не находится в базе данных.Создайте нового пользователя с новым authlogic login входа

Проблема в том, что мне также необходимо сохранить дополнительную информацию. если пользователь впервые регистрируется в своем openid, я хотел бы попросить их заполнить базовую информацию (имя, адрес электронной почты), ПЕРЕД учетной записью.

Я играл с несколькими методами, но ничего не работает.

Заранее благодарим за вход!

+0

Благодаря вас двоих, что ответили. То, что я закончил делать (в случае, если кто-то еще заинтересован!) Обрабатывал регистрацию openid, как обычно, но НЕ сохранял нового пользователя в базе данных. Вместо этого я сохранил их информацию в сеансе var и попросил их оставить оставшуюся информацию, прежде чем добавлять их в db и записывать их. Надеюсь, это поможет! – Ryan

ответ

0

Возможно, вы попытаетесь помещать дополнительную информацию в какую-либо временную таблицу и отслеживать сеанс, в котором находится пользователь. После того, как они прошли проверку подлинности, подключите ранее введенную информацию с информацией openid, чтобы создать настоящего пользователя ,

0
acts_as_authentic do |c| 
    c.openid_required_fields = [:email,"http://axschema.org/contact/email"] 
end 

Позволит вам потребовать электронное письмо. Я не уверен, как требовать другие поля, но, возможно, проверьте эту страницу axschema.org. Пользователю не нужно заполнять ничего, кроме URL-адреса поставщика OpenID.

Объединение логин и регистрации можно было бы сделать что-то вроде этого (непроверенные создать метод от контроллера UserSessions, как из authlogic учебник материал)

def create 
    if User.find_by_openid_provider(params[:user_session]).nil? # or something like that 
    @user = User.new(params[:user_session]) 
    if @user.save 
     redirect_to whatever_path 
    else 
     # handle error 
    end 
    else 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     add_message 'Login successful!' 
     redirect_to whatever_path 
    else 
     render :action => :new 
    end 
    end 
end 
Смежные вопросы