1 <?php
2 3 4 5 6 7 8
9 class MemberAuthenticator extends Authenticator {
10
11 12 13 14 15
16 static $migrate_legacy_hashes = array(
17 'md5' => 'md5_v2.4',
18 'sha1' => 'sha1_v2.4'
19 );
20
21 22 23 24 25 26 27 28 29 30 31
32 public static function authenticate($RAW_data, Form $form = null) {
33 $SQL_user = Convert::raw2sql($RAW_data['Email']);
34 $isLockedOut = false;
35 $result = null;
36
37
38 if(Security::check_default_admin($RAW_data['Email'], $RAW_data['Password'])) {
39 $member = Security::findAnAdministrator();
40 } else {
41 $member = DataObject::get_one(
42 "Member",
43 "\"" . Member::get_unique_identifier_field() . "\" = '$SQL_user' AND \"Password\" IS NOT NULL"
44 );
45
46 if($member) {
47 $result = $member->checkPassword($RAW_data['Password']);
48 } else {
49 $result = new ValidationResult(false, _t('Member.ERRORWRONGCRED'));
50 }
51
52 if($member && !$result->valid()) {
53 $member->registerFailedLogin();
54 $member = false;
55 }
56 }
57
58
59 60 61
62 if(Security::login_recording()) {
63 $attempt = new LoginAttempt();
64 if($member) {
65
66 $attempt->MemberID = $member->ID;
67 $attempt->Status = 'Success';
68
69
70 $member->extend('authenticated');
71 } else {
72
73 $existingMember = DataObject::get_one("Member", "\"" . Member::get_unique_identifier_field() . "\" = '$SQL_user'");
74 if($existingMember) {
75 $attempt->MemberID = $existingMember->ID;
76
77
78 $existingMember->extend('authenticationFailed');
79 } else {
80
81
82 singleton('Member')->extend('authenticationFailedUnknownUser', $RAW_data);
83 }
84 $attempt->Status = 'Failure';
85 }
86 if(is_array($RAW_data['Email'])) {
87 user_error("Bad email passed to MemberAuthenticator::authenticate(): $RAW_data[Email]", E_USER_WARNING);
88 return false;
89 }
90
91 $attempt->Email = $RAW_data['Email'];
92 $attempt->IP = Controller::curr()->getRequest()->getIP();
93 $attempt->write();
94 }
95
96
97
98
99
100
101 if(
102 $member
103 && self::$migrate_legacy_hashes
104 && array_key_exists($member->PasswordEncryption, self::$migrate_legacy_hashes)
105 ) {
106 $member->Password = $RAW_data['Password'];
107 $member->PasswordEncryption = self::$migrate_legacy_hashes[$member->PasswordEncryption];
108 $member->write();
109 }
110
111 if($member) {
112 Session::clear('BackURL');
113 } else {
114 if($form && $result) $form->sessionMessage($result->message(), 'bad');
115 }
116
117 return $member;
118 }
119
120
121 122 123 124 125 126 127 128
129 public static function get_login_form(Controller $controller) {
130 return Object::create("MemberLoginForm", $controller, "LoginForm");
131 }
132
133
134 135 136 137 138
139 public static function get_name() {
140 return _t('MemberAuthenticator.TITLE', "E-mail & Password");
141 }
142 }
143
144 ?>
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-