【发布时间】:2015-01-26 15:01:18
【问题描述】:
我正在关注this tutorial,但在用户连接omniauth 时如何将用户重定向到一个页面以填写更多信息时失败。
在我的用户模型中,我有:
user = User.new(
name: auth.extra.raw_info.name,
user_name: auth.info.nickname,
about_me: auth.info.description,
email: email ? email : "#{TEMP_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com",
password: Devise.friendly_token[0,20]
)
user.skip_confirmation!
user.save!
在我的 Omniauth 回调控制器中,我有:
def after_sign_in_path_for(resource)
if resource.profile_valid?
super resource
else
finish_signup_path(resource
end
end
profile_valid 检查:
def profile_valid?
self.email && self.email !~ TEMP_EMAIL_REGEX
end
Twitter auth 不会给你一封电子邮件,这是我注册时需要的,所以我传递了一封带有正则表达式 (TEMP_EMAIL_REGEX) 的虚拟电子邮件。
因此,当一个有效的电子邮件不存在时,它应该重定向到包含:
<div id="add-email" class="container">
<h1>Add Email</h1>
<%= form_for(current_user, :as => 'user', :url => finish_signup_path(current_user), :html => { role: 'form'}) do |f| %>
<% if @show_errors && current_user.errors.any? %>
<div id="error_explanation">
<% current_user.errors.full_messages.each do |msg| %>
<%= msg %><br>
<% end %>
</div>
<% end %>
<!-- User Name -->
<div class="form-group">
<%= f.label :user_name %>
<div class="controls">
<%= f.text_field :user_name, :autofocus => true, :value => '', class: 'form-control', placeholder: 'Username' %>
<p class="help-block">Please enter your username</p>
</div>
</div>
<div class="form-group">
<%= f.label :email %>
<div class="controls">
<%= f.text_field :email, :autofocus => true, :value => '', class: 'form-control', placeholder: 'Example: email@me.com' %>
<p class="help-block">Please confirm your email address. No spam.</p>
</div>
</div>
<div class="actions">
<%= f.submit 'Continue', :class => 'btn btn-primary' %>
</div>
<% end %>
</div>
这是我的问题,当我输入一些内容时,它不会保存用户,如果在实际字段中存在当前值会更好?
但是我不知道如何做到这一点,或者我现在尝试这个太久了并且有一个隧道视野。
我错过了什么?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 devise omniauth twitter-oauth