4
4
5
5
use Exception ;
6
6
use Firebase \JWT \JWT ;
7
+ use Illuminate \Auth \GuardHelpers ;
7
8
use Illuminate \Container \Container ;
9
+ use Illuminate \Contracts \Auth \Guard ;
8
10
use Illuminate \Contracts \Debug \ExceptionHandler ;
9
11
use Illuminate \Contracts \Encryption \Encrypter ;
10
12
use Illuminate \Cookie \CookieValuePrefix ;
11
13
use Illuminate \Cookie \Middleware \EncryptCookies ;
12
14
use Illuminate \Http \Request ;
15
+ use Illuminate \Support \Traits \Macroable ;
13
16
use Laravel \Passport \ClientRepository ;
14
17
use Laravel \Passport \Passport ;
15
18
use Laravel \Passport \PassportUserProvider ;
20
23
use Nyholm \Psr7 \Factory \Psr17Factory ;
21
24
use Symfony \Bridge \PsrHttpMessage \Factory \PsrHttpFactory ;
22
25
23
- class TokenGuard
26
+ class TokenGuard implements Guard
24
27
{
28
+ use GuardHelpers, Macroable;
29
+
25
30
/**
26
31
* The resource server instance.
27
32
*
@@ -57,6 +62,20 @@ class TokenGuard
57
62
*/
58
63
protected $ encrypter ;
59
64
65
+ /**
66
+ * The request instance.
67
+ *
68
+ * @var \Illuminate\Http\Request
69
+ */
70
+ protected $ request ;
71
+
72
+ /**
73
+ * The currently authenticated client.
74
+ *
75
+ * @var \Laravel\Passport\Client|null
76
+ */
77
+ protected $ client ;
78
+
60
79
/**
61
80
* Create a new token guard instance.
62
81
*
@@ -65,56 +84,83 @@ class TokenGuard
65
84
* @param \Laravel\Passport\TokenRepository $tokens
66
85
* @param \Laravel\Passport\ClientRepository $clients
67
86
* @param \Illuminate\Contracts\Encryption\Encrypter $encrypter
87
+ * @param \Illuminate\Http\Request $request
68
88
* @return void
69
89
*/
70
90
public function __construct (
71
91
ResourceServer $ server ,
72
92
PassportUserProvider $ provider ,
73
93
TokenRepository $ tokens ,
74
94
ClientRepository $ clients ,
75
- Encrypter $ encrypter
95
+ Encrypter $ encrypter ,
96
+ Request $ request
76
97
) {
77
98
$ this ->server = $ server ;
78
99
$ this ->tokens = $ tokens ;
79
100
$ this ->clients = $ clients ;
80
101
$ this ->provider = $ provider ;
81
102
$ this ->encrypter = $ encrypter ;
103
+ $ this ->request = $ request ;
82
104
}
83
105
84
106
/**
85
107
* Get the user for the incoming request.
86
108
*
87
- * @param \Illuminate\Http\Request $request
88
109
* @return mixed
89
110
*/
90
- public function user (Request $ request )
111
+ public function user ()
91
112
{
92
- if ($ request ->bearerToken ()) {
93
- return $ this ->authenticateViaBearerToken ($ request );
94
- } elseif ($ request ->cookie (Passport::cookie ())) {
95
- return $ this ->authenticateViaCookie ($ request );
113
+ if (! is_null ($ this ->user )) {
114
+ return $ this ->user ;
115
+ }
116
+
117
+ if ($ this ->request ->bearerToken ()) {
118
+ return $ this ->user = $ this ->authenticateViaBearerToken ($ this ->request );
119
+ } elseif ($ this ->request ->cookie (Passport::cookie ())) {
120
+ return $ this ->user = $ this ->authenticateViaCookie ($ this ->request );
96
121
}
97
122
}
98
123
124
+ /**
125
+ * Validate a user's credentials.
126
+ *
127
+ * @param array $credentials
128
+ * @return bool
129
+ */
130
+ public function validate (array $ credentials = [])
131
+ {
132
+ return ! is_null ((new static (
133
+ $ this ->server ,
134
+ $ this ->provider ,
135
+ $ this ->tokens ,
136
+ $ this ->clients ,
137
+ $ this ->encrypter ,
138
+ $ credentials ['request ' ],
139
+ ))->user ());
140
+ }
141
+
99
142
/**
100
143
* Get the client for the incoming request.
101
144
*
102
- * @param \Illuminate\Http\Request $request
103
145
* @return mixed
104
146
*/
105
- public function client (Request $ request )
147
+ public function client ()
106
148
{
107
- if ($ request ->bearerToken ()) {
108
- if (! $ psr = $ this ->getPsrRequestViaBearerToken ($ request )) {
149
+ if (! is_null ($ this ->client )) {
150
+ return $ this ->client ;
151
+ }
152
+
153
+ if ($ this ->request ->bearerToken ()) {
154
+ if (! $ psr = $ this ->getPsrRequestViaBearerToken ($ this ->request )) {
109
155
return ;
110
156
}
111
157
112
- return $ this ->clients ->findActive (
158
+ return $ this ->client = $ this -> clients ->findActive (
113
159
$ psr ->getAttribute ('oauth_client_id ' )
114
160
);
115
- } elseif ($ request ->cookie (Passport::cookie ())) {
116
- if ($ token = $ this ->getTokenViaCookie ($ request )) {
117
- return $ this ->clients ->findActive ($ token ['aud ' ]);
161
+ } elseif ($ this -> request ->cookie (Passport::cookie ())) {
162
+ if ($ token = $ this ->getTokenViaCookie ($ this -> request )) {
163
+ return $ this ->client = $ this -> clients ->findActive ($ token ['aud ' ]);
118
164
}
119
165
}
120
166
}
@@ -285,6 +331,19 @@ protected function getTokenFromRequest($request)
285
331
return $ token ;
286
332
}
287
333
334
+ /**
335
+ * Set the current request instance.
336
+ *
337
+ * @param \Illuminate\Http\Request $request
338
+ * @return $this
339
+ */
340
+ public function setRequest (Request $ request )
341
+ {
342
+ $ this ->request = $ request ;
343
+
344
+ return $ this ;
345
+ }
346
+
288
347
/**
289
348
* Determine if the cookie contents should be serialized.
290
349
*
0 commit comments