Projekt

Obecné

Profil

Stáhnout (2.87 KB) Statistiky
| Větev: | Revize:
1
<?php
2

    
3
namespace Illuminate\Auth;
4

    
5
use Illuminate\Http\Request;
6
use Illuminate\Contracts\Auth\Guard;
7
use Illuminate\Contracts\Auth\UserProvider;
8

    
9
class TokenGuard implements Guard
10
{
11
    use GuardHelpers;
12

    
13
    /**
14
     * The request instance.
15
     *
16
     * @var \Illuminate\Http\Request
17
     */
18
    protected $request;
19

    
20
    /**
21
     * The name of the field on the request containing the API token.
22
     *
23
     * @var string
24
     */
25
    protected $inputKey;
26

    
27
    /**
28
     * The name of the token "column" in persistent storage.
29
     *
30
     * @var string
31
     */
32
    protected $storageKey;
33

    
34
    /**
35
     * Create a new authentication guard.
36
     *
37
     * @param  \Illuminate\Contracts\Auth\UserProvider  $provider
38
     * @param  \Illuminate\Http\Request  $request
39
     * @return void
40
     */
41
    public function __construct(UserProvider $provider, Request $request)
42
    {
43
        $this->request = $request;
44
        $this->provider = $provider;
45
        $this->inputKey = 'api_token';
46
        $this->storageKey = 'api_token';
47
    }
48

    
49
    /**
50
     * Get the currently authenticated user.
51
     *
52
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
53
     */
54
    public function user()
55
    {
56
        // If we've already retrieved the user for the current request we can just
57
        // return it back immediately. We do not want to fetch the user data on
58
        // every call to this method because that would be tremendously slow.
59
        if (! is_null($this->user)) {
60
            return $this->user;
61
        }
62

    
63
        $user = null;
64

    
65
        $token = $this->getTokenForRequest();
66

    
67
        if (! empty($token)) {
68
            $user = $this->provider->retrieveByCredentials(
69
                [$this->storageKey => $token]
70
            );
71
        }
72

    
73
        return $this->user = $user;
74
    }
75

    
76
    /**
77
     * Get the token for the current request.
78
     *
79
     * @return string
80
     */
81
    protected function getTokenForRequest()
82
    {
83
        $token = $this->request->input($this->inputKey);
84

    
85
        if (empty($token)) {
86
            $token = $this->request->bearerToken();
87
        }
88

    
89
        if (empty($token)) {
90
            $token = $this->request->getPassword();
91
        }
92

    
93
        return $token;
94
    }
95

    
96
    /**
97
     * Validate a user's credentials.
98
     *
99
     * @param  array  $credentials
100
     * @return bool
101
     */
102
    public function validate(array $credentials = [])
103
    {
104
        if (empty($credentials[$this->inputKey])) {
105
            return false;
106
        }
107

    
108
        $credentials = [$this->storageKey => $credentials[$this->inputKey]];
109

    
110
        if ($this->provider->retrieveByCredentials($credentials)) {
111
            return true;
112
        }
113

    
114
        return false;
115
    }
116

    
117
    /**
118
     * Set the current request instance.
119
     *
120
     * @param  \Illuminate\Http\Request  $request
121
     * @return $this
122
     */
123
    public function setRequest(Request $request)
124
    {
125
        $this->request = $request;
126

    
127
        return $this;
128
    }
129
}
(12-12/13)