小编wol*_*emm的帖子

比较PHP和NodeJS之间的BCrypt哈希

对于我正在处理的应用程序,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模块.

php bcrypt node.js

28
推荐指数
2
解决办法
7250
查看次数

在laravel中记录用户操作

我正在尝试将用户执行的所有操作(登录/注销/ 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)我对用户操作记录的搜索非常没有用.这只是开发人员不做的事吗?那么,是什么他们做什么?

php laravel

4
推荐指数
1
解决办法
6372
查看次数

标签 统计

php ×2

bcrypt ×1

laravel ×1

node.js ×1