我想修改身份验证行为,以便整个过程可以通过 xhr 在客户端完成。因此,例如,当我汇总登录表单时,login_handler 将返回一些关于成功和错误的 json 数据,而不是加载新的 html 页面或进行任何类型的重定向。我应该怎么做?
1230 次
3 回答
2
我试图用 TG2 做同样的事情。这是 amol 的延伸答案。我正在使用它,它对我来说很好用。
@expose("json")
def login(self, login, password):
identity = {"login": login,
"password": password}
# Authenticate the credentials
username = request.environ['repoze.who.plugins']['sqlauth'].authenticate(request.environ, identity)
if username:
print("Logged into " + username)
# Remember this user
response.headers = request.environ['repoze.who.plugins']['main_identifier'].remember(request.environ, {'repoze.who.userid':username})
return {"status": True, "username": username}
else:
print("Could not authenticate")
return {"status": False, "username": None}
于 2011-09-30T08:38:24.700 回答
2
您应该能够通过获取标识符并调用 remember 方法来编写自己的登录控制器。
首先从数据库中检索您的用户,验证密码,然后如果一切正确,您可以设置身份验证 cookie:
response.headers = request.environ['repoze.who.plugins']['main_identifier'].remember(request.environ, {'repoze.who.userid':user_name})
最后还从控制器返回一个 json dict,确认成功或不用于 UI 目的
于 2011-07-09T17:34:47.680 回答
1
如果您提取用户名和密码并将它们作为参数发送到登录脚本,则可以验证用户并相应地返回结果。
$.ajax({
url: "login.php",
data: "username="+$("#username")+"&password="+$("#password"),
method: 'GET',
dataType: 'json',
async: false,
success: function(msg){
if(msg.success){
$("#content_area").html(msg.data);
}
}
});
脚本看起来像这样:
if( $_REQUEST['username'] == "correct_username" && $_REQUEST['password'] == "correct_password"){
return json_encode( array( "success" => true, "data" => "stuff" ) );
}else{
return json_encode( array( "success" => false ) );
}
不过,我建议不要这样做,因为该过程本身充满了安全问题和漏洞。如果您可以安全地将凭据发布到服务器并允许 Web 服务器处理会话、设置 cookie 并正确进行身份验证,那么请尝试这样做。
于 2011-03-28T07:45:55.357 回答