我想在没有密码的情况下更新用户属性.情况就像,如果密码和密码确认字段不是空白,那么我需要设计错误,如果它们是空白,则需要更新其他用户属性.我怎么能用设计做到这一点?
提前致谢!
我正在使用rails 3.2和设计2.0,我对Rails很新.
我想实现以下目标:
我用Google搜索并搜索了StackOverflow很长一段时间,但对我来说似乎没什么问题(我是一个Java人,对不起:)现在我很困惑.出现了两个解决方案:
这是最常见的答案.只需创建默认设备用户并在会员 - >用户和客户 - >用户之间创建关系.我关注的是如何为每个模型实现自定义注册过程?我尝试了不同的东西,但一切都结束了!
这解决了自定义注册过程,对我来说似乎是正确的,但唯一的登录表单是一个阻止程序.我在SO(Devise - 从两个模型登录)上找到了答案,建议覆盖Devise :: Models :: Authenticatable.find_for_authentication(条件).这似乎很复杂(?),因为我是铁杆新手,我想知道这是否有效?
谢谢你的建议!
我正在使用设计用户身份验证,但我有很好的模型用于注册,登录等页面.我已经完成了rails generate devise:views User命令并拥有了views文件夹中的所有视图,但是,当我用自己的new.html.erb替换registration/new.html.erb时,没有任何变化也没有看起来不同.就好像我做了什么.
任何人都知道我做错了什么或者至少知道如何成功定制设计视图
PS重要的是要注意我改变了设计路线/注册#new to/signup?
我的Rails应用程序使用Devise进行身份验证.它有一个姐妹iOS应用程序,用户可以使用他们用于Web应用程序的相同凭据登录iOS应用程序.所以我需要某种API进行身份验证.
这里有很多类似的问题指向本教程,但它似乎token_authenticatable已经过时了,因为该模块已从Devise中删除,并且某些行会抛出错误.(我正在使用Devise 3.2.2.)我试图根据那个教程(和这个教程)推出自己的教程(但是这个),但我对它没有100%的信心 - 我觉得我可能会有一些东西被误解或错过了.
首先,按照这个要点的建议,我authentication_token在我的users表中添加了一个text属性,以及以下内容user.rb:
before_save :ensure_authentication_token
def ensure_authentication_token
if authentication_token.blank?
self.authentication_token = generate_authentication_token
end
end
private
def generate_authentication_token
loop do
token = Devise.friendly_token
break token unless User.find_by(authentication_token: token)
end
end
Run Code Online (Sandbox Code Playgroud)
然后我有以下控制器:
api_controller.rb
class ApiController < ApplicationController
respond_to :json
skip_before_filter :authenticate_user!
protected
def user_params
params[:user].permit(:email, :password, :password_confirmation)
end
end
Run Code Online (Sandbox Code Playgroud)
(注意我application_controller有这条线before_filter :authenticate_user!.)
API/sessions_controller.rb
class Api::SessionsController < Devise::RegistrationsController
prepend_before_filter :require_no_authentication, :only …Run Code Online (Sandbox Code Playgroud) 我正在推出一个包含精选用户组的测试版网站.我想仅在生产环境中禁用注册,并且只在很短的时间内禁用注册(即我不想完全注册我的注册).我知道我可以简单地隐藏"注册"链接,但我怀疑黑客比我更聪明,仍然可以使用RESTful路由来完成注册.禁用注册的最佳方法是什么,以便我的测试/开发环境仍然有效,但生产受到影响?谢谢你的任何指示.
我已经尝试以"sign_up"转到"sign_in"的方式指向命名范围,但它不起作用.这是我尝试过的:
devise_scope :user do
get "users/sign_in", :to => "devise/sessions#new", :as => :sign_in
get "users/sign_up", :to => "devise/sessions#new", :as => :sign_up
end
Run Code Online (Sandbox Code Playgroud)
理想情况下,我们会将用户发送到"pages#registration_disabled"页面或类似的内容.我只是想得到一些我可以玩的东西.
编辑:我已根据要求更改了模型,然后将以下内容添加到/spec/user_spec.rb
describe "validations" do
it "should fail registration if in production mode" do
ENV['RAILS_ENV'] = "production"
@user = Factory(:user).should_not be_valid
end
end
Run Code Online (Sandbox Code Playgroud)
它传递的是"真实的"而不是虚假的.有没有办法模拟生产环境?我只是在吐这个.
谢谢!
在我安装设计并创建用户模型之后.我rake db:migrate,然后我rake routes.然后我得到一个错误,"未定义的方法`devise_for'为#".可能导致此错误的原因是什么?
我是Rails 4的新手,并且不理解在Rails 4中使用secret_key_baseunder config/secrets.yml.你能解释一下这个概念吗?
此外,当我在生产环境中我的工作,我提示设置secret_key有devise.rb,config.secret_key和secret_key_base.但是,我可以使用该rake secret命令生成一个新秘密.
开发和生产环境有什么区别?
secret_key当我secret_key_base每次生成时添加它时,它是如何匹配新生成的?
如何使用其他服务器保护应用程序?
我已经使用RESTful技术生成模型(事实上,我正在使用Devise gem,它为我做了这个),并且我在模型中添加了名为first_name和last_name的新字段.迁移进展顺利.我将attr_accessor:first_name,:last_name添加到模型中,并期望它能正常工作.但是当我尝试使用Doctor.create({:first_name =>"MyName"})等大量分配新实例时,我收到错误,说我无法批量分配受保护的属性.
我认为使用attr_accessor的重点是绕过模型字段的保护.你能帮我理解这个消息吗?
编辑:哦,顺便说一下,记录也没有创建.我认为它们应该是因为这只是一个警告,但它们不在数据库中.
Edit2:这是我的模特
class Doctor < User
has_many :patients
has_many :prescriptions, :through=> :patients
validates_presence_of :invitations, :on => :create, :message => "can't be blank"
attr_accessor :invitations
end
Run Code Online (Sandbox Code Playgroud)
和模式,它没有first_name和last_name,因为它们是在users表中创建的,这是医生的祖先.我使用单表继承.
create_table :doctors do |t|
t.integer :invitations
t.timestamps
end
Run Code Online (Sandbox Code Playgroud)
这是用于更改users表的迁移
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :type, :string
Run Code Online (Sandbox Code Playgroud)
编辑:这是种子文件.我不包括truncate_db_table方法,但它的工作原理.
%w{doctors patients}.each do |m|
truncate_db_table(m)
end
Doctor.create(:invitations=>5, :email=>"email@gmail.com", :first_name=>"Name", :last_name=>"LastName")
Patient.create(:doctor_id=>1, :gender=>"male", :date_of_birth=>"1991-02-24")
Run Code Online (Sandbox Code Playgroud) 设计authenticate_user!方法在哪里设计?
我一直在寻找它,到目前为止还没有找到它.
我有一个使用Devise进行身份验证的Rails 3应用程序.现在我需要允许某人使用他们的Facebook帐户登录.我认为这叫做Facebook Connect,但我也听过Facebook Graph API一词,所以我不确定我要求哪一个.
为了将Facebook Connect与Devise集成,我需要做些什么?
这个问题现在很老了.一年前,Devise v1.2引入了OmniAuth支持.现在Devise处于v2.1(截至本文撰写时),使用OmniAuth更加容易.这是一个来自Devise wiki的精彩教程,它使用omniauth-facebook带有Devise 的gem来允许使用Facebook登录.
另外,请查看有关注册应用程序和使用Facebook Graph API的精彩教程.
devise ×10
ruby-on-rails ×10
activerecord ×1
api ×1
facebook ×1
json ×1
methods ×1
oauth ×1
oauth-2.0 ×1
registration ×1
ruby ×1
secret-key ×1
security ×1
undefined ×1
views ×1