对于我正在处理的应用程序,nodejs需要验证PHP创建的哈希值,反之亦然.
问题是,PHP中生成的哈希(通过Laravel的Hash类,只使用PHP的password_hash函数)在node.js中测试时返回false.
以下node.js脚本:
var bcrypt = require('bcrypt');
var password = 'password';
var phpGeneratedHash = '$2y$10$jOTwkwLVn6OeA/843CyIHu67ib4RixMa/N/pTJVhOjTddvrG8ge5.';
var nodeGeneratedHash = '$2a$10$ZiBH5JtTDtXqDajO6f4EbeBIXGwtcGg2MGwr90xTH9ki34SV6rZhO';
console.log(
bcrypt.compareSync(password, phpGeneratedHash) ? 'PHP passed' : 'PHP failed',
bcrypt.compareSync(password, nodeGeneratedHash) ? 'nodejs passed' : 'nodejs failed'
);
Run Code Online (Sandbox Code Playgroud)
输出:'PHP失败的nodejs传递',而以下的PHP脚本:
<?php
$password = 'password';
$phpGeneratedHash = '$2y$10$jOTwkwLVn6OeA/843CyIHu67ib4RixMa/N/pTJVhOjTddvrG8ge5.';
$nodeGeneratedHash = '$2a$10$ZiBH5JtTDtXqDajO6f4EbeBIXGwtcGg2MGwr90xTH9ki34SV6rZhO';
print password_verify($password, $phpGeneratedHash) ? 'PHP passed' : 'PHP failed';
print password_verify($password, $nodeGeneratedHash) ? 'nodejs passed' : 'nodejs failed';
Run Code Online (Sandbox Code Playgroud)
输出'PHP传递的nodejs传递'.
我已经运行使用PHP 5.5.18在Ubuntu 14.04.1测试,Node.js的v0.10.32和故宫bcrypt模块.
我正在尝试将用户执行的所有操作(登录/注销/ CRUD)记录到我的数据库中的日志表中,并且从我看到的事件看起来是正确的方法.
我did($action)在User模型中添加了一个方法,该方法将动作记录到给定用户的数据库中.
这是我到目前为止所得到的:
EventServiceProvider.php
namespace App\Events;
use Illuminate\Support\ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->events->subscribe(new UserEventSubscriber);
}
}
Run Code Online (Sandbox Code Playgroud)
UserEventSubscriber.php
namespace App\Events;
class UserEventSubscriber
{
public function login(\User $user)
{
return $user->did('logged_in');
}
public function logout(\User $user)
{
return $user->did('logged_out');
}
public function subscribe($events)
{
$events->listen('user.login', 'App\Events\UserEventSubscriber@login');
$events->listen('user.logout', 'App\Events\UserEventSubscriber@logout');
}
}
Run Code Online (Sandbox Code Playgroud)
要记录操作:
Event::fire('user.logout', array(Auth::user()));
Run Code Online (Sandbox Code Playgroud)
我仍然试图围绕服务提供商,所以我可能会非常偏向于此.
我的问题:
1)服务提供商是正确使用的还是这个?
2)是否有更好的方法,不需要Auth::user()每次都手动传递给事件?
3)事件应在什么级别被解雇?我尽可能倾向于模型,因为它可以从批量操作中提供更多有用的日志.否则就是控制器或存储库.
4)这些事件仅在管理区域(/ admin/*)中是必需的.以某种方式将此限制为仅限于网站的该部分是否有益?
5)我对用户操作记录的搜索非常没有用.这只是开发人员不做的事吗?那么,是什么做他们做什么?