@@ -76,6 +76,9 @@ public function testValidToken()
76
76
$ this ->assertSame ($ decoded ->message , 'abc ' );
77
77
}
78
78
79
+ /**
80
+ * @runInSeparateProcess
81
+ */
79
82
public function testValidTokenWithLeeway ()
80
83
{
81
84
JWT ::$ leeway = 60 ;
@@ -86,9 +89,11 @@ public function testValidTokenWithLeeway()
86
89
$ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
87
90
$ decoded = JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
88
91
$ this ->assertSame ($ decoded ->message , 'abc ' );
89
- JWT ::$ leeway = 0 ;
90
92
}
91
93
94
+ /**
95
+ * @runInSeparateProcess
96
+ */
92
97
public function testExpiredTokenWithLeeway ()
93
98
{
94
99
JWT ::$ leeway = 60 ;
@@ -100,7 +105,6 @@ public function testExpiredTokenWithLeeway()
100
105
$ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
101
106
$ decoded = JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
102
107
$ this ->assertSame ($ decoded ->message , 'abc ' );
103
- JWT ::$ leeway = 0 ;
104
108
}
105
109
106
110
public function testValidTokenWithNbf ()
@@ -116,6 +120,9 @@ public function testValidTokenWithNbf()
116
120
$ this ->assertSame ($ decoded ->message , 'abc ' );
117
121
}
118
122
123
+ /**
124
+ * @runInSeparateProcess
125
+ */
119
126
public function testValidTokenWithNbfLeeway ()
120
127
{
121
128
JWT ::$ leeway = 60 ;
@@ -126,9 +133,11 @@ public function testValidTokenWithNbfLeeway()
126
133
$ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
127
134
$ decoded = JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
128
135
$ this ->assertSame ($ decoded ->message , 'abc ' );
129
- JWT ::$ leeway = 0 ;
130
136
}
131
137
138
+ /**
139
+ * @runInSeparateProcess
140
+ */
132
141
public function testInvalidTokenWithNbfLeeway ()
133
142
{
134
143
JWT ::$ leeway = 60 ;
@@ -139,9 +148,45 @@ public function testInvalidTokenWithNbfLeeway()
139
148
$ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
140
149
$ this ->expectException (BeforeValidException::class);
141
150
JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
142
- JWT ::$ leeway = 0 ;
143
151
}
144
152
153
+ public function testValidTokenWithNbfIgnoresIat ()
154
+ {
155
+ $ payload = [
156
+ 'message ' => 'abc ' ,
157
+ 'nbf ' => time () - 20 , // time in the future
158
+ 'iat ' => time () + 20 , // time in the past
159
+ ];
160
+ $ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
161
+ $ decoded = JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
162
+ $ this ->assertEquals ('abc ' , $ decoded ->message );
163
+ }
164
+
165
+ public function testValidTokenWithNbfMicrotime ()
166
+ {
167
+ $ payload = [
168
+ 'message ' => 'abc ' ,
169
+ 'nbf ' => microtime (true ), // use microtime
170
+ ];
171
+ $ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
172
+ $ decoded = JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
173
+ $ this ->assertEquals ('abc ' , $ decoded ->message );
174
+ }
175
+
176
+ public function testInvalidTokenWithNbfMicrotime ()
177
+ {
178
+ $ this ->expectException (BeforeValidException::class);
179
+ $ payload = [
180
+ 'message ' => 'abc ' ,
181
+ 'nbf ' => microtime (true ) + 20 , // use microtime in the future
182
+ ];
183
+ $ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
184
+ JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
185
+ }
186
+
187
+ /**
188
+ * @runInSeparateProcess
189
+ */
145
190
public function testValidTokenWithIatLeeway ()
146
191
{
147
192
JWT ::$ leeway = 60 ;
@@ -152,9 +197,11 @@ public function testValidTokenWithIatLeeway()
152
197
$ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
153
198
$ decoded = JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
154
199
$ this ->assertSame ($ decoded ->message , 'abc ' );
155
- JWT ::$ leeway = 0 ;
156
200
}
157
201
202
+ /**
203
+ * @runInSeparateProcess
204
+ */
158
205
public function testInvalidTokenWithIatLeeway ()
159
206
{
160
207
JWT ::$ leeway = 60 ;
@@ -165,7 +212,28 @@ public function testInvalidTokenWithIatLeeway()
165
212
$ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
166
213
$ this ->expectException (BeforeValidException::class);
167
214
JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
168
- JWT ::$ leeway = 0 ;
215
+ }
216
+
217
+ public function testValidTokenWithIatMicrotime ()
218
+ {
219
+ $ payload = [
220
+ 'message ' => 'abc ' ,
221
+ 'iat ' => microtime (true ), // use microtime
222
+ ];
223
+ $ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
224
+ $ decoded = JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
225
+ $ this ->assertEquals ('abc ' , $ decoded ->message );
226
+ }
227
+
228
+ public function testInvalidTokenWithIatMicrotime ()
229
+ {
230
+ $ this ->expectException (BeforeValidException::class);
231
+ $ payload = [
232
+ 'message ' => 'abc ' ,
233
+ 'iat ' => microtime (true ) + 20 , // use microtime in the future
234
+ ];
235
+ $ encoded = JWT ::encode ($ payload , 'my_key ' , 'HS256 ' );
236
+ JWT ::decode ($ encoded , new Key ('my_key ' , 'HS256 ' ));
169
237
}
170
238
171
239
public function testInvalidToken ()
0 commit comments