我正在使用Active Admin gem为管理后端开发Rails 4应用程序.Active Admin反过来使用Devise进行用户身份验证.现在,当我尝试capistrano
在VPS服务器上部署应用程序时,我收到以下错误:
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '-- secret key --'
Run Code Online (Sandbox Code Playgroud)
Google搜索对此错误没有太大作用.有什么建议为什么它会抛出错误?我应该将密钥添加到devise
初始化程序,因为我找不到任何设置此类配置密钥的地方initializers/devise.rb
?
我在rails中使用devise gem匹配用户密码时遇到问题.存储在我的数据库上的用户密码是encrypted_password,我试图通过密码查找用户,但我不明白如何匹配表格中的密码和我的数据库中的encrypted_password.
User.find_by_email_and_password(params[:user][:email], params[:user][:password])
Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 5
我在模型用户中添加了新的字段用户名.
class Users::RegistrationsController < Devise::RegistrationsController
before_action :configure_permitted_parameters
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up).push(:username)
end
end
Run Code Online (Sandbox Code Playgroud)
在注册期间显示错误:未定义的方法`for'for#您的意思是?叉子
跟踪:
NoMethodError(未定义的方法`为'for#你的意思是?fork):
app/controllers/users/registrations_controller.rb:7:in `configure_permitted_parameters'
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.0ms)
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.9ms)
Rendering /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms)
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (118.1ms)
Run Code Online (Sandbox Code Playgroud)
谁可以帮忙?怎么解决这个问题?
在运行应用程序时,如何通过电子邮件地址选择用户,然后在rails console
Devise中手动设置密码?
另外,在使用Devise时,我将在哪里查看文档以涵盖有关操作帐户的更多详细信息?
我有一个应用程序设置,每个用户都属于一个公司,该公司有一个子域名(我使用的是basecamp样式的子域名).我面临的问题是rails正在创建多个cookie(一个用于lvh.me,另一个用于subdomain.lvh.me),这在我的应用程序中造成了相当多的中断(例如flash消息在所有请求中都是持久的签到).
我在/cofig/initilizers/session_store.rb文件中有这个:
AppName::Application.config.session_store :cookie_store, key: '_application_devise_session', domain: :all
Run Code Online (Sandbox Code Playgroud)
域名:所有似乎都是我在谷歌上找到的标准答案,但这似乎对我不起作用.任何帮助表示赞赏!
我正在尝试为sign_in操作使用名为"devise"的不同/自定义布局.我在设计维基中找到了这个页面,第二个例子甚至说你可以按行动(在这种情况下,sign_in
动作),但它没有显示这样做的例子.IRC的某个人告诉我,我可以试试这个:
class ApplicationController < ActionController::Base
protect_from_forgery
layout :layout_by_resource
def layout_by_resource
if devise_controller? && resource_name == :user && action_name == 'sign_in'
"devise"
else
"application"
end
end
end
Run Code Online (Sandbox Code Playgroud)
但它似乎没有工作,因为它仍然加载默认的应用程序布局.我将不胜感激任何帮助.
在过去的两个小时里,我一直在尝试调试设计中的一个奇怪的问题,这不是让我登录.
这也是我所指的东西:
password
=> 'vinodsobale'
password == 'vinodsobale'
=> true
resource.valid_password?(password)
=> false
resource.valid_password?('vinodsobale')
=> true
Run Code Online (Sandbox Code Playgroud)
附上截图:
注意:我在设计中启用了调试器,因此上面的代码是设计内部代码.
对我来说,它看起来像是一个问题Devise.secure_compare
.
我为我的路线使用以下代码:
devise_for :user,
:as => '',
:path_names => {
:sign_in => "",
:sign_out => "logout",
:sign_up => "register"
}
Run Code Online (Sandbox Code Playgroud)
但是当我退出并且我转到后,/logout
我收到以下错误:
没有路由匹配{:action =>"new",:controller =>"devise/sessions"}
如何设置要:sign_in
采取行动的根路径?
我正在使用Rails API构建一个简单的api ,并希望确保我在这里正确的轨道.我正在使用设计来处理登录,并决定使用Devise的token_authenticatable
选项,它会生成一个API密钥,您需要随每个请求一起发送.
我将API与骨干/牵线木偶前端配对,我一般想知道如何处理会话.我的第一个想法是将api密钥存储在本地存储或cookie中,并在页面加载时检索它,但是从安全的角度来看存储api密钥的方式让我感到困扰.通过查看本地存储/ cookie或嗅探任何经过的请求来获取api密钥并不容易,并使用它来无限期地冒充该用户?我目前正在每次登录时重置api密钥,但即使这样也很频繁 - 任何时候你登录任何设备,这意味着你会被其他人登录,这是一种痛苦.如果我可以放弃这种重置,我觉得从可用性的角度来看它会有所改善.
我可能在这里完全错了(并且希望我是),任何人都可以解释这种方式的认证是否可靠安全,如果不是,那么一个好的替代方案是什么?总的来说,我正在寻找一种方法,我可以安全地保持用户'登录'到API访问,而不经常强制重新认证.