Rails 遇到一个棘手问题

tiseheaini · 2015年07月23日 · 最后由 tiseheaini 回复于 2015年07月23日 · 1806 次阅读

遇到一个棘手问题 一个 bbs 类型的网站,当用户点击 “发帖” 按钮时

class ApplicationController < ActionController::Base
  def login_required
      #验证用户是否登录
  end
end

写了一个 login_required 方法用来检测用户是否登录。 默认情况下 Request header 中 Accept:text/html; 不能在 login_required 中执行 render js: "alert('需要登录才能发帖')"

是否可以强制设置 Content-Typetext/javascript 来执行 js 代码。

try

def login_required
    #验证用户是否登录
  if current_user_login?
      options[:notice] = '请先登录'
      options[:redirect] =  '你的登录页面'
      handle_unverified_user options
  end
end

def handle_unverified_user(options)
  respond_to do |format|
    format.any(:html, :mobile) do
      flash[:notice] = options[:notice]
      redirect_to options[:redirect]
    end
    format.json { render json: options[:notice], status: 401 }
    format.xml { render xml: options[:notice], status: 401 }
    format.js { _perform_js_response "window.alert('需要登录才能发帖');//和其他 js"}
  end
end

def _perform_js_response(body)
  response.status = 200
  response.body = body
  response.content_type = Mime::JS
end

我是这么做的,如果登录成功了,就在页面中写一个 current user 的变量。

@requireLogin = (event) ->
  return if gon.currentUser

  if event
    event.preventDefault()
    event.stopImmediatePropagation()

  toastr.info('请先登录')
  window.location = gon.signinPath

initRequireLogin = ->
  $('.auth').on 'click', requireLogin

#2 楼 @greatghoul #1 楼 @huobazi 谢谢,看到你们的代码,有些思路了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号