使用正则表达式接受用户/链接后的任何字符串

时间:2013-10-13 21:11:29

标签: ruby-on-rails ruby regex devise devise-confirmable

在我的rails应用程序中,我想接受" users /"之后的任何字符串。链接。我该怎么做?就是这样的。 users/xyzuser/asdas是可以接受的。我该怎么做?


def store_location
    # store last url - this is needed for post-login redirect to whatever the user last visited.
    if (request.fullpath != "/users/sign_in" &&
        request.fullpath != "/users/sign_up" &&
        request.fullpath != "/users/password" &&
        !request.xhr?) # don't store ajax calls
      session[:previous_url] = request.fullpath 
    end
  end

好的,这是完整的故事。我已实现此功能,只有在用户获得批准后才允许用户登录。问题是我只需要为一种类型的用户执行此操作,因此我通过覆盖它在registrations_controller.rb中实现了这一点。

 def create
    build_resource(sign_up_params)

    if resource.save
      # nil
      if !resource.has_role? :customer
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(resource_name, resource)
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
        expire_session_data_after_sign_in!
        respond_with resource, :location => after_inactive_sign_up_path_for(resource)
      end
  else
    resource.approved=true
    resource.save
    # nil
    set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(resource_name, resource)
        respond_with resource, :location => after_sign_up_path_for(resource)
      end
    else
      clean_up_passwords resource
      respond_with resource
    end
  end

因此,仅客户可以直接批准,但不能批准其他客户。因此,当用户收到确认电子邮件并点击他们登录的链接但得到确认令牌无效错误,这可能是由于页面被重新路由回到确认令牌,即使在登录并转到根路径时我也是如此已设置after_sign_in_path。这就是我尝试解决问题的原因。

这是错误还是其他的?

2 个答案:

答案 0 :(得分:1)

我已使用以下代码解决了该问题。这样可以确保当用户点击确认链接时,他在登录时不会再次重定向回确认链接,因为可确认模块会立即确认后立即登录。

我使用的是Rails 4,Devise 3.03版。

def store_location
# store last url - this is needed for post-login redirect to whatever the user last visited.
if (!request.fullpath.match("/users/") &&
!request.xhr?) # don't store ajax calls
session[:previous_url] = request.fullpath
end
end

答案 1 :(得分:0)

这将返回“users /”之后的字符串,如果不匹配则返回nil:

def getUser(str)
  matched = /users\/(.+)/.match(str)
  if(matched != nil)
    return matched[1]
  else
    # did not match format
  end

  return nil
end

在此处查看演示:http://rubyfiddle.com/riddles/94766