小编Nic*_*ick的帖子

CakePHP 2:覆盖AuthComponent的"密码"方法

我的目标是为每个用户提供一个独特的盐,而不是仅仅Configure::read('Security.salt')为每个用户使用.

我知道CakePHP 2.x不再自动散列密码.这允许我对密码执行模型验证,这是非常好的.但是,我没有看到我可以覆盖AuthComponent的"密码"方法的方法.因此,即使我可以控制密码在保存到数据库之前如何进行哈希处理,但我无法控制在执行实际登录时如何对密码进行哈希处理.从食谱:

在调用之前,您不需要哈希密码 $this->Auth->login().

如何$this->Auth->login()使用自定义密码哈希方法?

谢谢.

更新:我最终选择了Hannibal Lecter博士的答案(创建自定义身份验证对象).这是怎么做的:

旧代码:

$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
Run Code Online (Sandbox Code Playgroud)

新代码(将"表单"更改为"自定义"):

$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
Run Code Online (Sandbox Code Playgroud)

创建"app/Controller/Component/Auth/CustomAuthenticate.php"并使其如下所示:

<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');

class CustomAuthenticate extends FormAuthenticate {
}
Run Code Online (Sandbox Code Playgroud)

从"lib/Cake/Controller/Component/Auth/BaseAuthenticate.php"复制"_findUser"和"_password"方法,并将它们粘贴到"CustomAuthenticate"类中.然后对"_findUser"方法进行以下两个修改:

  1. 从"$ conditions"数组中删除此行: $model . '.' . $fields['password'] => $this->_password($password),

  2. 更改if (empty($result) || empty($result[$model])) {if (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {

然后对"_password"方法进行以下两个修改:

  1. 通过更改protected function _password($password) {为创建"$ id"参数 …

authentication passwords cakephp

10
推荐指数
1
解决办法
5977
查看次数

CakePHP中的测试驱动开发

我正在使用CakePHP 2.3,并想知道如何正确地使用测试驱动开发(TDD)构建CakePHP网站.我已经阅读了有关测试的官方文档,阅读了Mark Story的测试CakePHP控制器,并通过单元测试(幻灯片的PDF)观看了Mark Story的终身胜利,但仍然感到困惑.我应该注意到,我从来没有很好地用任何语言编写测试,并且没有很多经验,这可能会导致我的困惑.

我想看看如何使用TDD构建CakePHP网站的代码示例的一步一步演练.有关于TDD的文章,有关于使用CakePHP进行测试的文章,但我还没有找到一篇关于两者的深入文章.我想要一些能够完成整个过程的东西.我知道这有点高,因为除非我的Google-fu让我失望,否则我很确定这篇文章还没有发表,所以我基本上要求你写一篇文章(或者很长一段时间) Stack Overflow回答),这需要时间.因为这是一项很高的要求,所以如果有人愿意这样做,我计划在这个问题上获得一个值得很多点的赏金,以便更好地奖励某人的努力.我感谢你的时间.

testing tdd cakephp

9
推荐指数
1
解决办法
2861
查看次数

为什么&lang; 和&rang; 人物处理得如此奇怪?

http://www-archive.mozilla.org/newlayout/testcases/layout/entities.html有一个名为"杂项技术"的部分.该部分中包含的两个字符是"左指角支架"(&lang;&#9001;)和"右指角支架"(&rang;&#9002;).这些角色有一些奇怪的东西(以下列表中的前三个项目是在我的第一代运行Android 4.4.4的Moto X上测试的):

  1. 在Chrome 43.0.2357.93在Android上,所有四个实体(&lang;,&#9001;,&rang;&#9002;)是看不见的(它们只是看起来像空格).
  2. 在Android上的Opera 30.0.1856.92967中,所有四个实体都是不可见的(它们看起来像空格).
  3. 在Android上的Firefox 38.0.5中,两个命名实体(&lang;&rang;)看起来像黑色块,但两个编码实体(&#9001;&#9002;)看起来是正确的.
  4. 我使用Xcode的iOS模拟器来模拟运行iOS 8.3(12F69)的iPhone 5s.然后我在Safari中加载了链接.所有四个实体看起来都是正确的,但两个命名实体(&lang;&rang;)看起来与两个编码实体(&#9001;&#9002;)非常不同.
  5. 如果将页面转换为HTML5并通过验证器运行它,则会输出" 警告:文本运行不在Unicode规范化表单C中".关于两个编码实体(&#9001;&#9002;),但整个页面上没有其他实体收到任何警告或错误.

我认为上面列表中最有趣的项目是最后三个,因为看起来命名实体和编码实体没有得到同等对待.

所有其他角色看起来都很好,至少从我看到的情况来看.是什么让这些角色如此奇怪?

以下是此问题顶部链接中的"杂项技术"部分,以防链接停止工作:

<h3>Miscellaneous Technical</h3>

<table>
  <caption align=bottom>
    [1] lang is NOT the same character as U+003C 'less than' or U+2039 'single left-pointing angle quotation mark'<br> …
Run Code Online (Sandbox Code Playgroud)

html character

9
推荐指数
1
解决办法
2147
查看次数

PowerShell:可以确定文件的MIME类型吗?

PowerShell是否可以确定给定文件的类型?例如,如果我传递它的路径C:\Foo.zip,我可以让它确定该路径上的文件实际上是一个zip文件而不是其他东西吗?

.net powershell

8
推荐指数
2
解决办法
8722
查看次数

LAMP Guy如何轻松实现WebSockets?

我一直在使用Apache,MySQL和PHP.我想最终分支到Python/Django或Ruby/Ruby on Rails,但这是另一个讨论.关于Apache,MySQL和PHP的两个很棒的东西都是无处不在的,它们很容易启动网站.只需设置一个Apache虚拟主机,将数据库导入MySQL,然后将PHP文件复制到服务器上.而已.这就是我所做过的一切,也是我所知道的.请记住这一点.

如今,网站能够实时向用户提供数据变得越来越重要.由于Facebook和Gmail的实时特性,用户也期待这一点.此效果可以使用Ajax轮询伪造,但是,有一个很大的开销,如解释在这里.我想使用WebSockets.现在记住,我一直都是一个LAMP人.我只使用我之前描述的方法推出了网站.因此,如果我有一个CakePHP网站,我如何"添加"WebSockets的功能?我是否需要安装其他服务器或某些东西,还是可以让它与Apache一起顺利运行?它需要Apache 2.4吗?请向我解释一下这个过程,记住我只知道LAMP.谢谢!

php websocket

7
推荐指数
1
解决办法
1961
查看次数

PowerShell:创建自定义异常

这是我的代码:

Function Foo {
    If (1 -Eq 2) {
        # Do stuff
    }
    Else {
        # Throw custom exception
    }
}

Try {
    Foo

    Write-Host "Success"
}
Catch {
    $ErrorMessage = $_.Exception.InnerException.Message

    Write-Host "Failure"

    # Do stuff with the error message
}
Run Code Online (Sandbox Code Playgroud)

我想替换# Throw custom exception会导致Catch触发的代码.我怎样才能做到这一点?

.net powershell

7
推荐指数
1
解决办法
1万
查看次数

将Twitter Bootstrap Uncloseable Modal转换为可关闭的模态

我正在使用Twitter Bootstrap来创建一个无法关闭的模态.这是故意的.但是,十秒钟后,我希望用户能够通过按下转义键或单击它外部来关闭模态.可以这样做吗?这是示例代码:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title></title>
        <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">
    </head>
    <body>
        <!-- Button to trigger modal -->
        <a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a>

        <!-- Modal -->
        <div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
            <div class="modal-header">
                <h3 id="myModalLabel">A Modal That Can't Be Closed</h3>
            </div>
            <div class="modal-body">
                <p>There is no way to close this modal. I would like to make it so that after ten seconds, pressing the escape key or clicking outside …
Run Code Online (Sandbox Code Playgroud)

twitter-bootstrap

7
推荐指数
1
解决办法
3093
查看次数

IE 11,Flexbox和绝对定位不起作用

这就是Chrome在Windows 10中呈现我的HTML的方式:

铬

这就是Internet Explorer 11在Windows 10中呈现我的HTML的方式:

Internet Explorer 11

请注意,在Chrome中,您可以看到所有子菜单链接,但在Internet Explorer 11中则无法看到.我该怎么做才能使它在Internet Explorer 11中运行?

这是我的代码:

body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  min-width: 1280px;
}

a {
  color: #000;
  text-decoration: none;
}

a.active {
  color: #f00;
}

ul {
  margin: 0;
  padding: 0;
}

ul li {
  display: inline-block;
}

.menu > li {
  position: relative;
  font-size: 18px;
}

.menu > li + li {
  margin-left: 100px;
}

.submenu {
  position: absolute;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}

.submenu-4,
.submenu-5 { …
Run Code Online (Sandbox Code Playgroud)

html css internet-explorer css3 flexbox

7
推荐指数
1
解决办法
1万
查看次数

在移动浏览器中播放拖放音频

我有一个拖放的网站,可用于计算机,平板电脑和手机.它使用jQuery,jQuery UI和jQuery UI Touch Punch.拖动会导致播放短音频片段,同时播放也会播放.这个小提琴有一个例子.

不幸的是,在当前版本的iOS Safari和Android Chrome中,音频无法正常工作.有办法解决这个问题吗?

此图像解释了各种浏览器版本中的行为:

图片说明:

iOS Safari:在iOS 8.4及更低版本中,拖动音频和丢弃音频都会播放.在iOS 9.0及更高版本中,拖动音频和丢弃音频都不会播放.

Android Chrome:在版本51.0.2704.81中,拖动音频和丢弃音频都会播放.在版本52.0.2743.98和版本55.0.2883.91中,拖动音频和丢弃音频都不会播放.在版本56.0.2924.87和63.0.3239.111中,拖动音频不播放,但丢弃的音频播放.

这是代码,如果小提琴消失了:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Drag and Drop with Audio</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.3/css/base/jquery.ui.all.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.2/css/lightness/jquery-ui-1.10.2.custom.min.css" rel="stylesheet">
    <style>
      body {
        background: #fff;
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
      }

      #draggable {
        width: 100px;
        height: 100px;
        padding: 0.5em;
        float: left;
        margin: 10px 10px 10px 0;
      }

      #droppable {
        width: 150px;
        height: 150px;
        padding: 0.5em;
        float: …
Run Code Online (Sandbox Code Playgroud)

jquery google-chrome jquery-ui mobile-safari jquery-ui-touch-punch

7
推荐指数
1
解决办法
629
查看次数

CakePHP分页:我如何按多列排序以实现"粘性"功能?

我看到这个PAGINATE不能在同一时间两列排序票仍然是开放的,这使我相信,我想要做的也不是没有可能解决方法.所以我想我正在寻找的是一种解决方法.

我正在尝试做许多留言板的工作:有一个" sticky"功能.我想这样做,以便无论用户点击哪个表头链接进行排序,我的模型的" sticky"字段始终是第一个排序的,然后是用户点击的任何列.我知道您可以设置$this->paginate['Model']['order']为您想要的任何内容,因此您可以将其设置为" sticky"字段,将用户选择的列放在第二位.这种方法的问题在于,在您执行此操作后,分页行为不正常.表头链接无法正常工作,切换页面也无法正常工作.还有其他一些解决方法吗?

pagination cakephp

6
推荐指数
1
解决办法
9044
查看次数