<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def verify_token(self, token, expiration_in_seconds=None):
 """ Verify token signature, verify token expiration, and decrypt token. | Returns None if token is expired or invalid. | Returns a list of strings and integers on success. Implemented as:: concatenated_str = self.decrypt_string(token, expiration_in_seconds) data_items = self.decode_data_items(concatenated_str) return data_items Example: :: # Verify that a User with ``user_id`` has a password that ends in ``password_ends_with``. token_is_valid = False data_items = token_manager.verify(token, expiration_in_seconds) if data_items: user_id = data_items[0] password_ends_with = data_items[1] user = user_manager.db_manager.get_user_by_id(user_id) token_is_valid = user and user.password[-8:]==password_ends_with """


        from cryptography.fernet import InvalidToken

        try:
            concatenated_str = self.decrypt_string(token, expiration_in_seconds)
            data_items = self.decode_data_items(concatenated_str)
        except InvalidToken:
            data_items = None

        return data_items