0 0

Rails应用中关于render的问题20

我的登录页面控制器和方法是user_session/new,为了不暴漏真实URI,我在路由里这样设置:
 map.login '/login', :controller => 'user_sessions', :action => 'new'

登录的时候访问:http://127.0.0.1:3000/login即可。
我的登录控制器(UserSessionsController)是这样写的:
 
def new
    @user_session = UserSession.new
  end

  def create
    @user_session = UserSession.new(params[:user_session])
    if @user_session.save
      flash[:notice] = 'sign in successful!'
      redirect_back_or_default '/users/new'
    else
      render 'new'
    end
  end 

这样以来,一旦出现错误(比如密码不正确之类的),就必须用render 'new'才能显示出错误,但是此时的URL也变成:
http://127.0.0.1:3000/user_session/new

把真实的内部信息暴漏出来了。有什么办法可以既能显示错误信息,又不暴漏真实URI?

附:view
<div id="login-form"> <% form_for @user_session, :url => user_session_path do |form| %>
 <div id="show-msg"><%= form.error_messages %></div>
  <table>
<tr>
 <td align="right"><%= form.label t('login name') %></td>
 <td align="left"><%= form.text_field :login %></td>
</tr>
<tr>
  <td align="right"><%= form.label t('password') %></td>
  <td align="left"><%= form.password_field :password %></td>
</tr>
<tr>
    <td></td>
    <td align="left">
    </td>
</tr>
<tr>
    <td align="left">
            <a href="/account/lost_password"><%=  t 'forget password'%></a>
    </td>
    <td align="right">
        <%= form.submit t('login')+" >>" %>
    </td>
</tr>
</table>

<% end %>
</div>

2011年7月22日 17:51

2个答案 按时间排序 按投票排序

0 0

建议你看一看《Beginning Rails 3》这本书的

Advanced Action Pack
这一章的
Sessions and the Login/Logout Logic P167
这一节,里面很详细地讲解了如何实现登陆登出功能并完全满足你对URL隐蔽性的要求。这本书的电子版在网上很容易下得到,下载地址:http://ishare.iask.sina.com.cn/f/14558345.html,希望能解决你的问题。

2011年7月28日 21:34
0 0

你可以考虑不要用render,用redirect,设置一个@message存放错误信息,然后在view里设置显示@message,当它不为空的时候。

2011年7月27日 20:56

相关推荐

    Ruby-这是一个在Rails应用程序中使用React并使用webpack的示例

    本示例将探讨如何在Rails应用中集成React,并利用webpack进行模块打包,提升项目的前端性能。 首先,React是Facebook推出的一个用于构建用户界面的JavaScript库,以其组件化开发方式和虚拟DOM(Document Object ...

    Ruby on Rails实例开发

    在Rails应用中,视图(View)部分通常包含HTML和CSS代码,通过 erb(Embedded Ruby)模板引擎,可以将Ruby代码嵌入到HTML中,实现动态内容的生成。 在实例开发过程中,我们可能首先会设置一个新的Rails项目,通过`...

    turbolinks_render:在Rails控制器中通过Turbolink支持`render`

    安装将此行添加到您的应用程序的Gemfile中: gem 'turbolinks_render' 然后执行: $ bundle用法默认情况下,如果满足以下条件,则render将由Turbolinks处理: 这是一个ajax请求这不是get请求它生成一个html响应( ...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **定义**:Rails是一种用于快速开发Web应用程序的开源框架,基于Ruby语言。 - **特点**:Rails遵循“约定优于配置”的原则,简化了Web应用的开发过程,使得开发者能够专注于业务逻辑而非框架本身。 #### 三、创建...

    ruby on rails对mongodb的操作

    在Rails应用中,我们还可以使用`form_for`和其他Rails助手来处理表单提交,以及`render`和`redirect_to`来管理视图和路由。 最后,`Rails应用中MongoDB+MySQL杂交`的话题意味着在同一个应用中同时使用MongoDB和...

    rails:Render的Rails 5入门项目

    3. **配置服务器**:设置服务器以处理Rails应用程序,如使用Puma或Unicorn。 4. **使用Capistrano**:Capistrano是一个流行的自动化部署工具,可以简化部署流程。 5. **SSL证书**:为了安全,启用HTTPS并安装SSL证书...

    Rails API 文档

    Rails 2.0中,控制器继承自ActionController基类,提供了许多方便的方法,如`redirect_to`和`render`。 3. **模型(Model)** 模型代表数据库中的数据,通过ActiveRecord库实现,允许开发者使用Ruby代码操作数据库。...

    rails上传文件_paperclip

    Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件上传功能变得相当便捷。 **Paperclip的基本使用** 1. **安装与配置** 首先,你需要通过Gemfile来安装Paperclip,并运行`bundle install`命令: ```...

    Crafting Rails Applications

    ### 《打造Rails应用》——深入探索Rails框架的高级实践 #### 一、书籍概述 本书《Crafting Rails Applications》是一本专为中级至高级Rails开发者编写的指南,旨在帮助读者深入了解Rails框架的工作原理及其高级...

    Rails里给文件上传添加progress_bar

    本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件上传的基本流程。在Rails中,最常用的是ActionController::Params模块中的`params`对象,它允许我们处理HTTP请求中包含的表单数据,包括文件...

    Flexible Rails: Flex3 on Rails2

    本书《Flexible Rails: Flex 3 on Rails 2》由Peter Armstrong撰写,旨在探讨如何结合使用Flex 3和Rails 2来开发高效的富互联网应用程序(Rich Internet Applications, RIA)。作者通过对Flex 3和Rails 2的概述以及...

    Rails 中页面中常用函数

    Rails作为一个MVC(模型-视图-控制器)架构的Web应用框架,它的视图层主要负责展示数据,而这里的`list.rhtml`就是一个典型的视图文件,用于渲染HTML并结合服务器端的数据。 在Rails中,`.rhtml`文件是ERB...

    rails实现验证码实例

    在这个实例中,我们将探讨如何在Rails应用中实现验证码功能。 首先,我们需要一个库来帮助我们生成和验证随机的图像验证码。一个常用的库是`kaptcha`,它提供了创建图片验证码的功能,并且可以自定义样式以适应应用...

    The Rails 4 Way

    - `routes.rb`是Rails应用程序中的路由配置文件。 - 通过定义路由规则,可以指定特定的URL应该如何被处理。 - 常见的路由规则包括资源路由、命名路由等。 3. **路由通配符** - 路由通配符允许开发者创建动态...

    使用Rails上传和转换视频

    然后,我们可以使用像是paperclip-ffmpeg或者carrierwave-ffmpeg这样的gem来集成FFmpeg到Rails应用中。对于ActiveStorage,我们可以自定义一个后台任务,比如使用Sidekiq或Resque来处理视频转换。 以下是一个使用...

    RJS Templates for Rails

    它们的出现极大地提升了Rails应用中JavaScript的编写效率和可维护性,尤其是在处理动态交互和页面更新时。RJS,全称是Ruby JavaScript,允许开发者用Ruby语言来生成JavaScript代码,从而避免了直接编写复杂的...

    rails有用的命令

    - `rails new demo`:这将创建一个新的Rails应用程序,名为“demo”。它会生成所有基本目录结构和配置文件。 2. **启动服务器**: - `rails server` 或 `rails s`:这个命令启动Rails开发服务器,默认端口为3000...

    rails ajax提交文件或图片

    在Rails框架中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于创建动态和交互式的Web应用程序。AJAX允许页面在不刷新整个页面的情况下与服务器进行通信,从而提高用户体验。在本篇博文中,我们将...

Global site tag (gtag.js) - Google Analytics