parse-community/parse-php-sdk

Question: an example to authenticate with user_id and a token?

xenogenesi opened this issue · 1 comments

I am working on a Laravel 8 project with Parse as backend, I created a service to lazy initialize ParseClient with the configuration, I created a ParseUserProvider and ParseAuthenticatable for login and it works (Laravel docs: Adding Custom User Providers).

I'd like, but It is not clear to me how, to enable the "remember me" feature with the API provided by the SDK.

Laravel provides a long-lasting cookie if the "remember me" checkbox is true at login.
When a user reloads the page if the cookie is set, retrieveByToken($identifier, $token) is called in UserProvider.

I tried to add a remember_token field to the _Session table, I use it to retrieve the sessionToken and then use it with become(), but it doesn't seem to work, in particular, unlike the login, the user is not copied to $_SESSION (and getCurrentUser() keeps failing).

What am I missing? Is there any other way?

retrieveByToken implementation
    /**
     * Retrieve a user by their unique identifier and "remember me" token.
     *
     * @param  mixed  $identifier
     * @param  string  $token
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function retrieveByToken($identifier, $token)
    {
        Log::debug('retrieveByToken', [$identifier, $token]);
        $parseService = App::make(ParseService::class);
        try {
            $sessionQuery = new ParseQuery("_Session");
            $sessionQuery->equalTo("remember_token", $token);
            $useMasterKey = true;
            $session = $this->castToParseSession($sessionQuery->first($useMasterKey));

            if (is_a($session, ParseSession::class)) {
                Log::debug('retrieveByToken session is_a session', [$session]);
                $sessionToken = $session->get("sessionToken");
                if (!is_null($sessionToken)) {
                    $user = ParseUser::become($sessionToken);
                    $authenticable = new ParseAuthenticatable([
                        'id' => $user->getObjectId(),
                        'username' => $user->getUsername(),
                        'email' => $user->getEmail(),
                        'remember_token' => $token,
                    ]);
                    return $authenticable;
                } else {
                    Log::debug('retrieveByToken session is null');
                }
            } else {
                Log::debug('retrieveByToken session', [$session]);
            }
        } catch (ParseException $e) {
            Log::error("Failed to set remember me token in session", [$e->getCode(), $e->getMessage()]);
        }
        return null;
    }

I'm closing this as it does not seem to be a Parse PHP SDK issue.

  • For help with Parse Platform we recommend our community forum
  • For coding questions we recommend Stack Overflow using the parse-platform tag
  • For network and server questions we recommend ServerFault using the parse-server tag

Feel free to comment if you have any questions and we can re-open this issue.