我正在构建一个node-webkit应用程序,每隔几分钟就会向我的Joomla站点发布一种日志条目。我对在我的应用程序中存储用户名/密码持怀疑态度。
我找到了两个解决方案,都允许通过网址登录(简单的GET内容)。
两者都允许我的本地node-webkit应用程序像这样登录:
http://www.mysite.com/index.php?option=com_test&username=foo&password=foo
但是第二个解决方案说明了这一点:
如果获得成功,我的意思是如果信息正确,那么您将获得此信息:
[{“status”:“登录成功”,“user_id”:“982”,“用户名”:“用户”,“session_key”:“1e3fdgdt4454580ae78e2ab90f35856c17f3”}]
- 状态
- USER_ID
- 用户名
- session_key可以
醇>您可以在下次将所有信息存储在应用中。
存储会话密钥是否允许我将来登录网站,即使是第一次登录后几天?我试过四处寻找,却找不到答案。或者我应该使用某种本地加密存储登录凭据。再次 - 这是node-webkit所以我不确定我可以存储的东西有多安全。
答案 0 :(得分:0)
我不确切知道通过GET处理身份验证的插件的内部功能,但总的想法是这样的:
我最近没有检查确切的实现,但据我所知,会话是浏览器用户代理/ IP(不确定IP)敏感。这意味着如果您的环境中发生了某些变化,会话检查将失败,您需要重新登录。
理想情况下,您不希望将会话存储太长时间。如果它不是非常时间敏感的,或者经常会这样做,我只会重新登录我每次都需要。
如果身份验证部分不适合您,请考虑另一种方法(不理想,但它可能适合您):您将组件/ API入口点设为公共(所以你不需要进行身份验证)并在你的请求中发送一个秘密密钥(基于令牌的身份验证),你在保存数据/做事之前用PHP检查。因此,每个安装都有一个唯一的密钥,您可以在应用程序中的网站上插入密钥(作为设置)。
答案 1 :(得分:0)
在Joomla 3.2中测试
我在问题中发布的两个脚本只做了我想要的一半。即他们只检查登录凭据是否有效,返回消息并且没有做任何其他事情。
我所做的是修改了hocoi的脚本来登录我。注意:在您进行身份验证并确保用户已提供正确的详细信息后,会发生这种情况。然后,要登录用户,只需使用JFactory::getApplication()->login($credentials)
方法,如下所示:
$credentials = array();
$credentials['username'] = $username;
$credentials['password'] = $password1;
JFactory::getApplication()->login($credentials);
我还发现这段代码会在您登录后添加必要的标头Cookie。如果您计划维护登录,这将非常有用。
if(!isset($_COOKIE['jsid'])){
$user = & JFactory::getUser();
$temp_session = $_SESSION; // backup all session data
session_write_close();
ini_set("session.save_handler","files"); // set session saved hadler on file
session_start();
$_SESSION = (array)$temp_session['__default']['user']; // data that another php file need to know
session_write_close();
ini_set("session.save_handler","user"); // put back session saved handler on database
$jd = new JSessionStorageDatabase();
$jd->register(); // set required parameters
session_start(); // restart //
$_SESSION = $temp_session; // restore last session data
$e = session_id();
setcookie("jsid", $e, time()+3600,'/');
}
正如@ Valentin的回答,你可能想为此创建一个基本的API。像这样的远程登录应该是最后的手段。我正在使用它作为本地应用程序的入口点,以通过API密钥连接。