Devise:用户有唯一的 url,如何防止他们使用控制器操作路由?

发布于 2024-11-13 16:46:35 字数 537 浏览 2 评论 0原文

在我的配置文件中,我有这一行(注意:我正在使用来自 slugged gem 的cached_slugs):

match '/:id', :to => 'users#show', :as => 'user'

如何防止用户使用当前用于控制器操作的路由进行注册?

例如,用户可以使用用户名“users”进行注册,其个人资料的唯一 URL 将为 http://localhost:3000/用户;但是,我正在使用该路由进行 users#index 操作。我总是可以设置它,以便用户必须使用传统方式 http://localhost:3000/users/theusernametheychose 但为了用户友好性,我更喜欢另一种方式。关于解决这个问题的最佳方法有什么建议吗?非常感谢!

In my config file I have this line (note: I am using cached_slugs from the slugged gem):

match '/:id', :to => 'users#show', :as => 'user'

How do I prevent users from signing up with routes that are currently being used for controller actions?

For example, a user could sign up with the username 'users' and their profile's unique URL would be http://localhost:3000/users; however, I am using that route for the users#index action. I could always set it so users have to use the traditional way of http://localhost:3000/users/theusernametheychose but I would prefer it the other way for user friendliness sake. Any suggestions on the best way to solve this? Thank you very much!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无声情话 2024-11-20 16:46:35

您可以向用户模型添加验证,以检查应用程序中定义的现有路由:

class User < ActiveRecord::Base
  ...

  validates_exclusion_of :name, 
                         :in => Rails.application.routes.routes.map {|r| r.path.match(/\/(\w+)\//) }.compact.map{|m| m[1] }.uniq, 
                         :message => "Username %{value} is reserved.

end

You could add a validation to your user model that checks agains the existing routes defined in the application:

class User < ActiveRecord::Base
  ...

  validates_exclusion_of :name, 
                         :in => Rails.application.routes.routes.map {|r| r.path.match(/\/(\w+)\//) }.compact.map{|m| m[1] }.uniq, 
                         :message => "Username %{value} is reserved.

end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文