-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAuth.php
145 lines (107 loc) · 3.62 KB
/
Auth.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
namespace App;
use \App\Models\User;
use \App\Models\RememberedLogin;
/* Authentication Class */
class Auth {
/* METHOD: forgetLogin
* @param void :
* @return void : If present, forget the remembered login
*/
protected static function forgetLogin() {
$cookie = $_COOKIE['remember_me'] ?? false;
if ($cookie) {
$remembered_login = RememberedLogin::findByToken($cookie);
if ($remembered_login) {
//Delete database record where the token hash matches
$remembered_login->delete();
//Expire the cookie
setcookie('remember_me','',time()-3600);
}
}
}
/* METHOD, getReturnToPage
* @param void :
* @return string : Return either the SESSION-saved URI or '/', indicating home
*/
public static function getReturnToPage() {
return $_SESSION['return_to'] ?? '/';
}
/* METHOD: getUser
* @param void :
* @return mixed : Get User model from SESSION user_id or null if not logged in
*/
public static function getUser() {
if (isset($_SESSION['user_id'])) {
return User::findByID($_SESSION['user_id']);
} else {
return static::loginFromRememberedCookie();
}
}
/* METHOD, login
* @param mixed : $user object
* @return void : Generate new session ID and set SESSION user_id
*/
public static function login($user,$remember_me) {
//Generate a new SESSION ID to avoid Session Fixation attacks
session_regenerate_id(true);//true deletes old
$_SESSION['user_id'] = $user->user_id;
if ($remember_me) {
if ($user->rememberLogin()) {
//Set the cookie
setcookie('remember_me',$user->remember_token,$user->expiry_timestamp,'/');//'/' indicates the path (root)
}
}
// Create SESSION info
$_SESSION['user_id'] = $user->user_id;
}
/* METHOD, loginFromRememberedCookie
* @param void :
* @return mixed : User model or null
*/
protected static function loginFromRememberedCookie() {
$cookie = $_COOKIE['remember_me'] ?? false;
if ($cookie) {
$remembered_login = RememberedLogin::findByToken($cookie);
if ($remembered_login && ! $remembered_login->hasExpired()) {
$user = $remembered_login->getUser();
static::login($user,false);
return $user;
}
}
}
/* METHOD, logout
* @param void :
* @return void : Destroy cookies and session
*/
public static function logout() {
//Unset session variable
$_SESSION = array();
// Delete cookie
if (ini_get('session.use_cookies')) {
$params = session_get_cookie_params();
// Expire the SESSION ID cookie
setcookie(
session_name(),
'',
time()-42000,
$params['path'],
$params['domain'],
$params['secure'],
$params['httponly']
);
}
// Destroy session
session_destroy();
//Delete the remembered login cookie and DB record
static::forgetLogin();
}
/* METHOD, rememberRequestedPage
* @param void :
* @return void : Save the requested URI to a SESSION variable on the server
*/
public static function rememberRequestedPage() {
$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
}
}
?>