javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

ruby on rails-设计:在注册期间禁用密码确认

我正在使用Devise for Rails。 在默认注册过程中,Devise要求用户输入两次密码以进行验证和身份验证。 如何禁用它?

trans by 2020-08-12T09:50:41Z

Rails 3身份验证:Authlogic与Devis

我一直在Rails 2.3中使用Authlogic,但是现在我在使用Rails 3,我想我可以尝试一种新的身份验证解决方案。

Devise与Authlogic相比如何? 他们有什么区别?

trans by 2020-08-11T19:41:12Z

Rails Devise:设置密码重置令牌并重定向我们

在特定用例的应用程序中,我创建了一个新用户(以编程方式设置了密码),并向他们发送了一封确认电子邮件。

我希望他们能够在确认后立即更改密码(无需进入系统生成的我不想发送给他们的密码)

实际上我想要
1)系统使用生成的密码创建一个新的用户帐户。
2)系统发送确认电子邮件。
3)用户单击确认并被重定向以输入密码(有效地将其发送到如下所示的URL)

<a href="http://localhost:3000/users/password/edit?reset_password_token=v5Q3oQGbsyqAUUxyqLtb">Change my password</a>

任何帮助/指针都将很棒。

trans by 2020-08-11T03:43:31Z

红宝石在轨道上-设计记住我和会议

我对devise gem配置设置感到困惑:

  # The time the user will be remembered without asking for credentials again.
  config.remember_for = 2.weeks

  # The time you want to timeout the user session without activity. After this
  # time the user will be asked for credentials again.
  config.timeout_in = 10.minutes

我想让用户选中“记住我”复选框(即让我保持登录状态),但是默认会话超时为10分钟。 10分钟后,即使我单击了“记住我”,它也会要求我再次登录。 如果这是真的,那么“ remember_for”实际上是没有意义的。 显然我在这里错过了一些东西。

trans by 2020-08-11T00:54:02Z

在用户注册时设计“确认令牌无效”

在我的Web应用程序上使用Rails 4和Devise 3.1.0。 我编写了一个Cucumber测试来测试用户注册。 当从电子邮件中单击“确认我的帐户”链接时,它失败。

Scenario: User signs up with valid data                                                           # features/users/sign_up.feature:9
    When I sign up with valid user data                                                             # features/step_definitions/user_steps.rb:87
    Then I should receive an email                                                                  # features/step_definitions/email_steps.rb:51
    When I open the email                                                                           # features/step_definitions/email_steps.rb:76
    Then I should see the email delivered from "no-reply@mysite.com"                                # features/step_definitions/email_steps.rb:116
    And I should see "You can confirm your account email through the link below:" in the email body # features/step_definitions/email_steps.rb:108
    When I follow "Confirm my account" in the email                                                 # features/step_definitions/email_steps.rb:178
    Then I should be signed in                                                                      # features/step_definitions/user_steps.rb:142
      expected to find text "Logout" in "...Confirmation token is invalid..." (RSpec::Expectations::ExpectationNotMetError)
     ./features/step_definitions/user_steps.rb:143:in `/^I should be signed in$

当我也通过Web服务器手动注册时,此错误是可重现的,因此它似乎不是Cucumber问题。

我想要:

  • 用户可以通过此电子邮件的链接一键确认其帐户
  • 确认帐户后让用户保持登录状态

我已经设置:

  • 来自GitHub的最新Devise代码(3.1.0,ref 041fcf90807df5efded5fdcd53ced80544e7430f)
  • 实现User.confirm_by_token('[EMAIL_CONFIRMATION_TOKEN]')User
  • 使用“默认”确认控制器(我尚未定义自己的自定义控制器。)

我已阅读以下帖子:

  • 设计确认_令牌无效
  • Devise 3.1:现在具有更安全的默认设置
  • GitHub问题-设计确认_令牌无效

并尝试过:

  • 在我的Devise初始化程序中设置User,这会在启动时引发“未知方法”错误。 另外,听起来这只是临时解决方法,所以我想避免使用它。
  • 清除数据库并从头开始(因此不存在旧令牌)

更新:

注册后检查存储在User上的确认令牌。 电子邮件令牌与数据库令牌匹配。 根据上面的帖子,新的Devise行为表示不应该这样做,而是应该基于电子邮件的令牌生成另一个令牌。 这是可疑的。 运行User.confirm_by_token('[EMAIL_CONFIRMATION_TOKEN]')返回的用户错误集为“ @messages = {:confirmation_token => [“ is invalid”]]}“,这似乎是问题的根源。

令牌不匹配似乎是问题的核心。 在控制台中运行以下代码以手动更改用户的Confirmation_token会使确认成功:

new_token = Devise.token_generator.digest(User, :confirmation_token, '[EMAIL_TOKEN]')
u = User.first
u.confirmation_token = new_token
u.save
User.confirm_by_token('[EMAIL_TOKEN]') # Succeeds

那么,为什么首先将错误的确认令牌保存到数据库呢? 我正在使用自定义注册控制器...也许其中有某些东西导致其设置不正确?

routes.rb

  devise_for  :users,
          :path => '',
          :path_names => {
            :sign_in => 'login',
            :sign_out => 'logout',
            :sign_up => 'register'
            },
          :controllers => {
            :registrations => "users/registrations",
            :sessions => "users/sessions"
          }

users / registrations_controller.rb:

class Users::RegistrationsController < Devise::RegistrationsController

  def create
    # Custom code to fix DateTime issue
    Utils::convert_params_date_select params[:user][:profile_attributes], :birthday, nil, true

    super
  end

  def sign_up_params
    # TODO: Still need to fix this. Strong parameters with nested attributes not working.
    #       Permitting all is a security hazard.
    params.require(:user).permit!
    #params.require(:user).permit(:email, :password, :password_confirmation, :profile_attributes)
  end
  private :sign_up_params
end
trans by 2020-07-23T12:21:10Z

ruby on rails-设计:为什么我的注销链接不起作用?

问题:简而言之,当我尝试安装到我的应用程序的注销链接时,它将无法正常工作。 我想到的就是这里的背景信息(如果您还有其他需要,请戳一下我)...

我有一个haml视图:

= link_to("Logout", destroy_user_session_path, :method => :delete)

它在视图中生成:

<a href="/users/sign_out" data-method="delete" rel="nofollow">Logout</a>

我验证了在我的config / initializers / devise.rb中,此设置没有注释和正确:

config.sign_out_via = :delete

我验证了以下路线:

destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}

我的routes.rb中也有这种欺骗性,我怀疑这与我的问题有关:

devise_for :users, :controllers => {:sessions => "devise/sessions", :registrations => "users"}
resources :users

最后一点是因为我想在自己的控制器中管理(编辑,创建和删除)用户。

我收到的错误消息如下:

ActiveRecord::RecordNotFound in UsersController#show

Couldn't find User with ID=sign_out
Rails.root: /home/jaydel/projects/mbsquared-projects/Wilson-Goldrick

app/controllers/users_controller.rb:16:in `show'

在服务器日志中,我看到了该请求:

Started GET "/users/sign_out" for 127.0.0.1 at 2011-08-04 13:08:51 -0500
  Processing by UsersController#show as HTML
  Parameters: {"id"=>"sign_out"}

有人有主意吗?

trans by 2020-07-22T19:08:19Z

在Devise on Rails beta 3中创建管理员用户

好的,当有人用我缺少的简单内容回答这个问题时,我可能会觉得很傻,但是...

我在Rails 3 Beta上有了一个全新的应用程序,并且正在使用devise进行身份验证。 我已经运行了所有评论,并且目前一切正常。 我已经创建了一个用户角色和一个管理员角色(按照以下说明进行操作:[https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role)]并且我已经注册 我自己是第一位用户,但如何注册或创建管理员角色用户? 来自设计人员的指示将管理员角色设置为不可注册,但是我不确定如果无法注册将如何创建管理员?

任何帮助,将不胜感激! 谢谢!

trans by 2020-07-20T22:02:57Z

为何我的RSpec无法加载Devise :: Test :: ControllerHelpers?

我正在使用Rails 5和Devise 3.5.1。

翻阅一本不错的(较旧的)有关创建/测试API的书,该书使用Devise身份验证。 它是在Rails 5之前编写的,因此我选择不使用新的仅API版本。

这是我的测试...

#/spec/controllers/api/v1/users_controller_spec.rb    

require 'rails_helper'

describe Api::V1::UsersController, :type => :controller do
    before(:each) { request.headers['Accept'] = "application/vnd.marketplace.v1" }
    describe "GET #show" do
        before(:each) do
            @user = FactoryGirl.create :user
            get :show, params: {id: @user.id}, format: :json
        end
        it "returns the information about a reporter on a hash" do
            user_response = JSON.parse(response.body, symbolize_names: true)
            expect(user_response[:email]).to eql @user.email
        end
        it { should respond_with 200 }
    end
end

这是一个完全意外的RSpec错误

Devise::MissingWarden:
       Devise could not find the `Warden::Proxy` instance on your request environment.
       Make sure that your application is loading Devise and Warden as expected and that the `Warden::Manager` middleware is present in your middleware stack.
       If you are seeing this on one of your tests, ensure that your tests are either executing the Rails middleware stack or that your tests are using the `Devise::Test::ControllerHelpers` module to inject the `request.env['warden']` object for you.

所以我去这里-[http://www.rubydoc.info/gems/devise/Devise/Test/ControllerHelpers]

并尝试了此->包括Devise :: Test :: ControllerHelpers

这没有帮助,因为文件controller_helpers.rb在我的项目中不存在

我在这里想念什么?

谢谢

trans by 2020-07-19T01:07:32Z

ruby on rails-使用Devis创建`Users`显示页面

我正在尝试创建一个用户show页面(该页面将用作个人资料页面),但对于如何使用Devise进行操作感到困惑。 似乎Devise并未附带任何类型的show定义-我可以通过任何方式访问Devise正在实现的控制器以创建一个控制器,还是必须重写它们?

trans by 2020-07-13T15:35:26Z

ruby on rails-设计API身份验证

我正在开发一个Rails Web应用程序,该应用程序还为移动设备提供了基于JSON的API。 移动客户端应首先通过(电子邮件/通过)获得令牌,然后客户端将使用该令牌进行后续的API调用。

我对Devise相当陌生,我正在寻找一个类似于authenticate(email, pass)的Devise API,并希望它返回true / false,然后基于此,我将创建并返回令牌或返回拒绝消息。 但似乎Devise没有提供类似的信息。

我知道Devise 1.3提供了基于JSON的身份验证,但这与我需要的有所不同-我需要生成令牌并处理回客户端,然后在使用该令牌完成身份验证之后。

有人可以指点一下吗?

trans by 2020-07-13T03:56:58Z

ruby on rails-向活动管理员添加新管理员

我正在为用户使用devise。 我最近安装了Rails Active Admin gem,一切运行正常。

但是我不知道如何添加一个新的管理员用户。 我可以看到活动管理员使用用户admin@example.com在数据库中创建了admin_user表,我使用该表登录界面。

我尝试将admin_user添加为资源,以便可以仅单击活动管理界面中的“添加管理员用户”按钮来添加新用户,但是这似乎不起作用。

trans by 2020-07-07T09:15:27Z

Rails禁用设计Flash消息

如何禁用所有Devise gem flash消息(“成功登录”,“您注销”)? 谢谢。

trans by 2020-07-06T13:25:25Z

Ruby on Rails-设计限制每个用户一个会话一次的会话时间

我的应用程序正在使用Rails 3.0.4和Devise 1.1.7。

我正在寻找一种防止用户共享帐户的方法,因为该应用程序是基于订阅的服务。 我已经搜索了一个多星期,但我仍然不知道如何实施解决方案。 我希望有人实施了一个解决方案,并可以指出正确的方向。

解决方案(谢谢大家的回答和见解!)

在应用程序controller.rb中

before_filter :check_concurrent_session

def check_concurrent_session
  if is_already_logged_in?
    sign_out_and_redirect(current_user)
  end
end

def is_already_logged_in?
  current_user && !(session[:token] == current_user.login_token)
end

在覆盖Devise Sessions控制器的session_controller中:

skip_before_filter :check_concurrent_session

def create
  super
  set_login_token
end

private
def set_login_token
  token = Devise.friendly_token
  session[:token] = token
  current_user.login_token = token
  current_user.save
end

在迁移中,AddLoginTokenToUsers

def self.up
  change_table "users" do |t|
    t.string "login_token"
  end
end

def self.down
  change_table "users" do |t|
    t.remove "login_token"
  end
end
trans by 2020-06-26T18:03:47Z

Ruby-如何在Devise中手动创建新的用户和用户会话?

我有一个表格,可以在Rails中收集很多信息。 该表格的一部分是供新用户注册的字段。 由于Devise具有专门用于创建新用户的控制器/动作,因此我不知道如何以编程方式在完全不同的动作中创建用户,该动作还会创建另一条记录。 我真的不能分开用户注册表。 我无法弄清楚如何创建用户,然后再登录用户,就像我在Authlogic中可以轻松做到的那样。

我同时使用了Authlogic和Devise,并认为它们各有优缺点。 使用Devise,我喜欢“开始”一个新项目有多快,但是自定义它似乎很痛苦。 不久前,Authlogic在Rails 3上遇到了很多问题,以至于我切换到Devise。 我现在正在研究一个新项目,并从头开始。

因此,我认为这个问题有2个潜在答案:(a)如何在Devise中执行此操作,或者(b)为什么我应该改用Rails 3切换到Authlogic。

trans by 2020-06-20T00:12:45Z

Ruby-扩展Devise SessionsController以使用JSON进行身份验证

我正在尝试为iPhone应用程序构建Rails API。 Devise对于通过Web界面登录的工作效果很好,但是我需要能够使用REST API创建和销毁会话,并且我想使用JSON而不是必须在会话控制器上执行POST以及解析HTML并处理 重定向。

我以为我可以做这样的事情:

class Api::V1::SessionsController < Devise::SessionsController  
  def create
    super
  end  
  def destroy
    super
  end  
end

并在config / routes.rb中添加:

namespace :api do
  namespace :v1 do
    resources :sessions, :only => [:create, :destroy]
  end
end

耙路线显示路线已正确设置:

   api_v1_sessions POST   /api/v1/sessions(.:format)     {:action=>"create", :controller=>"api/v1/sessions"}
    api_v1_session DELETE /api/v1/sessions/:id(.:format) {:action=>"destroy", :controller=>"api/v1/sessions"}

当我发布到/ user / sessions时,一切正常。 我得到一些HTML和302。

现在,如果我发布到/ api / v1 / sessions,则会得到:

未知动作 AbstractController :: ActionNotFound

curl -v -H 'Content-Type: application/json' -H 'Accept: application/json'   -X POST http://localhost:3000/api/v1/sessions   -d "{'user' : { 'login' : 'test', 'password' : 'foobar'}}"
trans by 2020-06-17T12:12:51Z

Ruby / Rails:如何自定义Devise的邮件模板?

我已经为我的Rails应用(3.0.1)安装了Devise,并且可以正常工作。 我只是似乎无法自定义邮件视图。

  • 我的用户模型是“用户”。
  • 设计控制器(我需要重写这些控制器,以便可以告诉控制器使用什么布局文件)在app/views/users/mailer/中,就像app/views/users/registrations/new.html.haml
  • 设计视图(我已编辑)在app/views/users/mailer/中像app/views/users/registrations/new.html.haml一样
  • 这是我的路线文件的设计部分:
    devise_for :users, :controllers => { 
      :sessions => "users/sessions", 
      :registrations => "users/registrations", 
      :passwords => "users/passwords", 
      :confirmations => "users/confirmations", 
      :unlocks => "users/unlocks"
    } do
      get "/login" => "devise/sessions#new"
      get "/logout" => "devise/sessions#destroy"
    end

至少上面的一切都能正常工作。 但是,在发送邮件时,Devise似乎使用的模板不是我在2752342347215275275008上编辑过的模板。Devise似乎仍采用默认模板(就像我从未编辑过文件一样)。 我猜Devise仍然使用gem中的文件。

如果有帮助,这里是黄瓜错误:

Feature: Manage accounts
  In order to manage accounts
  users
  should be able to signup

  # By default, www.example.com is the host when testing.
  # This is a problem because when our site searches for the domain example.com, it cant find any.
  # Therefore we must either set our testing domain to one of our choosing (and mention that in the routes), or create a domain example.com
  # I prefer the first option.
  Scenario: Signing up and resetting the password                                                                      # features/manage_accounts.feature:10
    Given I am on the login page                                                                                       # features/step_definitions/web_steps.rb:19
    When I follow "Sign up"                                                                                            # features/step_definitions/web_steps.rb:33
    And I fill in "Login" with "bobrobcom"                                                                             # features/step_definitions/web_steps.rb:39
    And I fill in "Email" with "my@email.com"                                                                          # features/step_definitions/web_steps.rb:39
    And I fill in "Password" with "123456"                                                                             # features/step_definitions/web_steps.rb:39
    And I fill in "Password confirmation" with "123456"                                                                # features/step_definitions/web_steps.rb:39
    And I press "Sign up"                                                                                              # features/step_definitions/web_steps.rb:27
    Then I should see "Your account has been created. A confirmation was sent to your e-mail."               # features/step_definitions/web_steps.rb:107
    And I should receive an email                                                                                      # features/step_definitions/email_steps.rb:51
    When I open the email                                                                                              # features/step_definitions/email_steps.rb:72
    Then I should see "Welcome bobrobcom!" in the email body                                                           # features/step_definitions/email_steps.rb:96
      expected "<p>Welcome my@email.com!</p>\n\n<p>You can confirm your account through the link below:</p>\n\n<p><a href=\"http://stils.dev/users/confirmation?confirmation_token=d9ZXliqfTArb2cNmwPzL\">Confirm my account</a></p>\n" to include "Welcome bobrobcom!" (RSpec::Expectations::ExpectationNotMetError)
      ./features/step_definitions/email_steps.rb:97:in `/^(?:I|they) should see "([^"]*?)" in the email body$/'
      features/manage_accounts.feature:21:in `Then I should see "Welcome bobrobcom!" in the email body'
    When I follow "Confirm my account"                                                                                 # features/step_definitions/web_steps.rb:33
    Then I should see "Your account was successfully confirmed. You are now signed in."                                # features/step_definitions/web_steps.rb:107
    When I log out                                                                                                     # features/step_definitions/user_steps.rb:9
    And I go to the reset password page                                                                                # features/step_definitions/web_steps.rb:23
    And I fill in "Email" with "my@email.com"                                                                          # features/step_definitions/web_steps.rb:39
    And I press "Send me reset password instructions"                                                                  # features/step_definitions/web_steps.rb:27
    Then I should see "You will receive an email with instructions about how to reset your password in a few minutes." # features/step_definitions/web_steps.rb:107
    And I should receive an email                                                                                      # features/step_definitions/email_steps.rb:51
    When I open the email                                                                                              # features/step_definitions/email_steps.rb:72
    Then I should see "Hello bobrobcom!" in the email body                                                             # features/step_definitions/email_steps.rb:96
    When I follow "Change my password" in the email                                                                    # features/step_definitions/email_steps.rb:166
    Then I should see "Set your new password"                                                                          # features/step_definitions/web_steps.rb:107

Failing Scenarios:
cucumber features/manage_accounts.feature:10 # Scenario: Signing up and resetting the password

和app / views / users / confirmation_instructions.erb:

<p>Welcome <%= @resource.login %>!</p>

<p>You can confirm your account through the link below:</p>

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p>

另外,如果有帮助,这里是我已重写的控制器:

| | |~users/
| | | |-confirmations_controller.rb
| | | |-passwords_controller.rb
| | | |-registrations_controller.rb
| | | |-sessions_controller.rb
| | | `-unlocks_controller.rb

如何解决此问题?

谢谢!

trans by 2020-02-18T01:42:17Z

Rails 4 + Devise:密码重置始终在生产服务器上给出“令牌无效”错误,但在本地运行良好。

我已经设置了可以使用Devise的Rails 4应用程序,但是我遇到了密码重置问题。 我已经设置了邮件程序,并且密码重置电子邮件可以正常发送。 提供的链接已分配了正确的reset_password_token,我已与该数据库进行了检查。 但是,当我使用正确格式的密码提交表单时,会出现错误,表明重置令牌无效。

但是,完全相同的代码可以通过rails s在本地正常工作。电子邮件发送成功,我实际上可以重设密码。 我使用的代码只是标准的Devise代码,我没有覆盖任何代码。

也许与Apache有关? 我不太熟悉。 有人有什么想法吗?

trans by 2020-02-09T05:56:25Z

如何从Rails控制台使用Devise登录用户?

加载Rails控制台后,应该如何登录用户?

Devise提供了一个可以在测试中使用的测试助手,而我尝试在控制台中使用它:

>> include Devise::TestHelpers
>> helper.sign_in(User.first)

但是我得到:

NoMethodError: undefined method `env' for nil:NilClass

无论如何,我想使用真正的设计助手而不是测试助手。 有什么办法可以做到这一点?

trans by 2020-02-05T19:05:35Z

devise-如何为编辑操作指定devise_parameter_sanitizer?

我已经将Devise添加到我的Rails 4应用程序中,并成功将用户名等添加到了我的用户模型中。 此外,我能够使用lazy way™(即,

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) } 
    end
end

但是,我尝试了

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
  devise_parameter_sanitizer.for(:edit) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
end

但这不能按预期方式工作(当用户通过edit动作调用时未存储用户名)。 为了使它正常工作,我还需要做其他事情吗? 谢谢!

trans by 2020-01-26T12:00:57Z

devise-Rails 3-Active_admin可以使用现有的用户模型吗?

Active Admin可以使用我当前的Devise用户模型吗? 它已经有一个名为admin的列,如果是true,我想在转到/admin时绕过Active admin登录。

这可能吗?

当前路线:

#Active admin
ActiveAdmin.routes(self)

#Devise
devise_for :admin_users, ActiveAdmin::Devise.config
devise_for :users, :path => "account"

其余的基本上是标准的Devise + Active admin

trans by 2020-01-23T19:15:58Z

1 2 3 下一页 共3页