我在laravel 5.4应用程序中有自定义类,它应返回散列密码。该课程是
class Hash {
// Unencrypted secret
private $secret;
public function generateSecret(){
$secret = generateSecretKey();
$secret_hash = password_hash($secret, PASSWORD_BCRYPT);
Session::put('secret-hash', $secret_hash);
$this->secret = $secret;
}
}
然后在我的控制器中我有
use Hash;
class UsersController extends BaseController
{
public function Auth()
{
$myhash = new Hash();
$msg = '';
$myhash->generateSecret();
$enc = $myhash->encryptSecret($key->key);
return View::make('users.auth', ['enc'=> $enc]);
}
...
}
来自控制器的 var_dump($myhash->generateSecret());
返回NULL
var_dump($secret)
中的{p> public function generateSecret()
返回string(15) "866094233422231" string(15) "583375207466239"
这是正确的。
UsersController中的 var_dump($myhash);
也返回正确的数据
String(15) "008844975703088" object(Hash)#329 (1)
{
["secret":"Hash":private]=> string(15) "008844975703088"
}
出现问题出在控制器中并生成哈希$myhash->generateSecret();
。该函数必须生成secret(一个字符串),然后进行散列$enc = $myhash->encryptSecret($key->key);
并显示在页面上。
为什么功能不起作用的任何想法?我不知道还能尝试什么。
答案 0 :(得分:1)
generateSecret()
不会返回任何内容,因此$myhash->generateSecret()
为NULL
。 generateSecret()
将$secret
设置为属性($this->secret = $secret
),但由于$secret
被声明为私有,因此您无法在{类,因此控制器中的$myhash->secret
将无效。
所以你有两个选择 - 要么返回秘密,以便调用代码可以看到它,要么添加一个getter使$secret
可以在课外访问。这是你如何归还它:
public function generateSecret(){
$secret = generateSecretKey();
$secret_hash = password_hash($secret, PASSWORD_BCRYPT);
Session::put('secret-hash', $secret_hash);
return $secret;
}
然后在你的控制器中:
$secret = $myhash->generateSecret();
答案 1 :(得分:0)
此功能:
public function generateSecret()
{
$secret = generateSecretKey();
$secret_hash = password_hash($secret, PASSWORD_BCRYPT);
Session::put('secret-hash', $secret_hash);
$this->secret = $secret;
}
不返回任何数据,因此var_dump($myhash->generateSecret());
将始终为空。
如果需要在课外访问,则应使用getter公开状态。