最近做的一个项目,用的devise验证身份,但是需要做登录成功和登录失败的日志。该怎么做呢?
其实devise是基于Warden做的验证。
我的方法是这样的,加一个sessions的controller,它继承了Devise::SessionsController,这样可以覆写它的create方法,也就是登录的方法。
在这个create的方法里调用super,并给它传入代码块:
super do |resource|
ip = request.remote_ip
Trace.create(username: params[:user][:email], result: true, descs: "登录成功", ip: ip)
end
这样就做了登录成功的日志了。
失败的日志,我是用的Warden回调方法before_failure:
Warden::Manager.before_failure do |env, opts|
params = Rack::Request.new(env).params
Trace.create(username: params["user"]["email"], result: false, descs: "登录失败") if params["button"].to_s=="create"
end
注意这里没有ip,ip的获取在create里,全部代码如下:
class SessionsController < Devise::SessionsController
@@ip = ""
def create
@@ip = request.remote_ip
super do |resource|
Trace.create(username: params[:user][:email], method_name: "login", result: true, descs: "登录成功", category: "login", ip: @@ip)
end
end
Warden::Manager.before_failure do |env, opts|
params = Rack::Request.new(env).params
Trace.create(username: params["user"]["email"], method_name: "login", result: false, descs: "登录失败", category: "login", ip: @@ip) if params["button"].to_s=="create"
end
end
不知道有没有更好的方法,如果有的话,麻烦告知一下,谢谢。