BlowfishAuthenticate.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. /**
  3. * PHP 5
  4. *
  5. * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  6. * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
  7. *
  8. * Licensed under The MIT License
  9. * Redistributions of the files must retain the above copyright notice.
  10. *
  11. * @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
  12. * @link http://cakephp.org CakePHP(tm) Project
  13. * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
  14. */
  15. App::uses('FormAuthenticate', 'Controller/Component/Auth');
  16. /**
  17. * An authentication adapter for AuthComponent. Provides the ability to authenticate using POST data using Blowfish
  18. * hashing. Can be used by configuring AuthComponent to use it via the AuthComponent::$authenticate setting.
  19. *
  20. * {{{
  21. * $this->Auth->authenticate = array(
  22. * 'Blowfish' => array(
  23. * 'scope' => array('User.active' => 1)
  24. * )
  25. * )
  26. * }}}
  27. *
  28. * When configuring BlowfishAuthenticate you can pass in settings to which fields, model and additional conditions
  29. * are used. See FormAuthenticate::$settings for more information.
  30. *
  31. * For inital password hashing/creation see Security::hash(). Other than how the password is initally hashed,
  32. * BlowfishAuthenticate works exactly the same way as FormAuthenticate.
  33. *
  34. * @package Cake.Controller.Component.Auth
  35. * @since CakePHP(tm) v 2.3
  36. * @see AuthComponent::$authenticate
  37. */
  38. class BlowfishAuthenticate extends FormAuthenticate {
  39. /**
  40. * Authenticates the identity contained in a request. Will use the `settings.userModel`, and `settings.fields`
  41. * to find POST data that is used to find a matching record in the`settings.userModel`. Will return false if
  42. * there is no post data, either username or password is missing, or if the scope conditions have not been met.
  43. *
  44. * @param CakeRequest $request The request that contains login information.
  45. * @param CakeResponse $response Unused response object.
  46. * @return mixed False on login failure. An array of User data on success.
  47. */
  48. public function authenticate(CakeRequest $request, CakeResponse $response) {
  49. $userModel = $this->settings['userModel'];
  50. list(, $model) = pluginSplit($userModel);
  51. $fields = $this->settings['fields'];
  52. if (!$this->_checkFields($request, $model, $fields)) {
  53. return false;
  54. }
  55. $user = $this->_findUser(
  56. array(
  57. $model . '.' . $fields['username'] => $request->data[$model][$fields['username']],
  58. )
  59. );
  60. if (!$user) {
  61. return false;
  62. }
  63. $password = Security::hash(
  64. $request->data[$model][$fields['password']],
  65. 'blowfish',
  66. $user[$fields['password']]
  67. );
  68. if ($password === $user[$fields['password']]) {
  69. unset($user[$fields['password']]);
  70. return $user;
  71. }
  72. return false;
  73. }
  74. }