src/Security/BasicAuth.php
public static function requireLogin(
        HTTPRequest $request,
        $realm,
        $permissionCode = null,
        $tryUsingSessionLogin = true
    ) {
        if ((Director::is_cli() && static::config()->get('ignore_cli'))) {
            return true;
        }

        $member = null;

        try {
            if ($request->getHeader('PHP_AUTH_USER') && $request->getHeader('PHP_AUTH_PW')) {
                /** @var MemberAuthenticator $authenticator */
                $authenticators = Security::singleton()->getApplicableAuthenticators(Authenticator::LOGIN);

                foreach ($authenticators as $name => $authenticator) {
                    $member = $authenticator->authenticate([
                        'Email' => $request->getHeader('PHP_AUTH_USER'),
                        'Password' => $request->getHeader('PHP_AUTH_PW'),
                    ], $request);
                    if ($member instanceof Member) {
                        break;
                    }
                }
            }
        } catch (DatabaseException $e) {
            // Database isn't ready, let people in
            return true;
        }

        if (!$member && $tryUsingSessionLogin) {
            $member = Security::getCurrentUser();
        }

        // If we've failed the authentication mechanism, then show the login form
        if (!$member) {
            $response = new HTTPResponse(null, 401);
            $response->addHeader('WWW-Authenticate', "Basic realm=\"$realm\"");

            if ($request->getHeader('PHP_AUTH_USER')) {
                $response->setBody(
                    _t(
                        'SilverStripe\\Security\\BasicAuth.ERRORNOTREC',
                        "That username / password isn't recognised"
                    )
                );
            } else {
                $response->setBody(
                    _t(
                        'SilverStripe\\Security\\BasicAuth.ENTERINFO',
                        'Please enter a username and password.'
                    )
                );
            }

            // Exception is caught by RequestHandler->handleRequest() and will halt further execution
            $e = new HTTPResponse_Exception(null, 401);
            $e->setResponse($response);
            throw $e;
        }

        if ($permissionCode && !Permission::checkMember($member->ID, $permissionCode)) {
            $response = new HTTPResponse(null, 401);
            $response->addHeader('WWW-Authenticate', "Basic realm=\"$realm\"");

            if ($request->getHeader('PHP_AUTH_USER')) {
                $response->setBody(
                    _t(
                        'SilverStripe\\Security\\BasicAuth.ERRORNOTADMIN',
                        'That user is not an administrator.'
                    )
                );
            }

            // Exception is caught by RequestHandler->handleRequest() and will halt further execution
            $e = new HTTPResponse_Exception(null, 401);
            $e->setResponse($response);
            throw $e;
        }

        return $member;
    }
public static function requireLogin(
        HTTPRequest $request,
        $realm,
        $permissionCode = null,
        $tryUsingSessionLogin = true
    ) {
        if ((Director::is_cli() && static::config()->get('ignore_cli'))) {
            return true;
        }

        $member = null;

        try {
            if ($request->getHeader('PHP_AUTH_USER') && $request->getHeader('PHP_AUTH_PW')) {
                /** @var MemberAuthenticator $authenticator */
                $authenticators = Security::singleton()->getApplicableAuthenticators(Authenticator::LOGIN);

                foreach ($authenticators as $name => $authenticator) {
                    $member = $authenticator->authenticate([
                        'Email' => $request->getHeader('PHP_AUTH_USER'),
                        'Password' => $request->getHeader('PHP_AUTH_PW'),
                    ], $request);
                    if ($member instanceof Member) {
                        break;
                    }
                }
            }
        } catch (DatabaseException $e) {
            // Database isn't ready, let people in
            return true;
        }

        if (!$member && $tryUsingSessionLogin) {
            $member = Security::getCurrentUser();
        }

        // If we've failed the authentication mechanism, then show the login form
        if (!$member) {
            $response = new HTTPResponse(null, 401);
            $response->addHeader('WWW-Authenticate', "Basic realm=\"$realm\"");

            if ($request->getHeader('PHP_AUTH_USER')) {
                $response->setBody(
                    _t(
                        'SilverStripe\\Security\\BasicAuth.ERRORNOTREC',
                        "That username / password isn't recognised"
                    )
                );
            } else {
                $response->setBody(
                    _t(
                        'SilverStripe\\Security\\BasicAuth.ENTERINFO',
                        'Please enter a username and password.'
                    )
                );
            }

            // Exception is caught by RequestHandler->handleRequest() and will halt further execution
            $e = new HTTPResponse_Exception(null, 401);
            $e->setResponse($response);
            throw $e;
        }

        if ($permissionCode && !Permission::checkMember($member->ID, $permissionCode)) {
            $response = new HTTPResponse(null, 401);
            $response->addHeader('WWW-Authenticate', "Basic realm=\"$realm\"");

            if ($request->getHeader('PHP_AUTH_USER')) {
                $response->setBody(
                    _t(
                        'SilverStripe\\Security\\BasicAuth.ERRORNOTADMIN',
                        'That user is not an administrator.'
                    )
                );
            }

            // Exception is caught by RequestHandler->handleRequest() and will halt further execution
            $e = new HTTPResponse_Exception(null, 401);
            $e->setResponse($response);
            throw $e;
        }

        return $member;
    }
public static function requireLogin ( HTTPRequest $ request , $ realm , $ permissionCode = null , $ tryUsingSessionLogin = true ) { if ( ( Director :: is_cli ( ) && static :: config ( ) -> get ( 'ignore_cli' ) ) ) { return true ; } $ member = null ; try { if ( $ request -> getHeader ( 'PHP_AUTH_USER' ) && $ request -> getHeader ( 'PHP_AUTH_PW' ) ) { /** @var MemberAuthenticator $authenticator */ $ authenticators = Security :: singleton ( ) -> getApplicableAuthenticators ( Authenticator :: LOGIN ) ; foreach ( $ authenticators as $ name => $ authenticator ) { $ member = $ authenticator -> authenticate ( [ 'Email' => $ request -> getHeader ( 'PHP_AUTH_USER' ) , 'Password' => $ request -> getHeader ( 'PHP_AUTH_PW' ) , ] , $ request ) ; if ( $ member instanceof Member ) { break ; } } } } catch ( DatabaseException $ e ) { // Database isn't ready, let people in return true ; } if ( ! $ member && $ tryUsingSessionLogin ) { $ member = Security :: getCurrentUser ( ) ; } // If we've failed the authentication mechanism, then show the login form if ( ! $ member ) { $ response = new HTTPResponse ( null , 401 ) ; $ response -> addHeader ( 'WWW-Authenticate' , "Basic realm=\"$realm\"" ) ; if ( $ request -> getHeader ( 'PHP_AUTH_USER' ) ) { $ response -> setBody ( _t ( 'SilverStripe\\Security\\BasicAuth.ERRORNOTREC' , "That username / password isn't recognised" ) ) ; } else { $ response -> setBody ( _t ( 'SilverStripe\\Security\\BasicAuth.ENTERINFO' , 'Please enter a username and password.' ) ) ; } // Exception is caught by RequestHandler->handleRequest() and will halt further execution $ e = new HTTPResponse_Exception ( null , 401 ) ; $ e -> setResponse ( $ response ) ; throw $ e ; } if ( $ permissionCode && ! Permission :: checkMember ( $ member -> ID , $ permissionCode ) ) { $ response = new HTTPResponse ( null , 401 ) ; $ response -> addHeader ( 'WWW-Authenticate' , "Basic realm=\"$realm\"" ) ; if ( $ request -> getHeader ( 'PHP_AUTH_USER' ) ) { $ response -> setBody ( _t ( 'SilverStripe\\Security\\BasicAuth.ERRORNOTADMIN' , 'That user is not an administrator.' ) ) ; } // Exception is caught by RequestHandler->handleRequest() and will halt further execution $ e = new HTTPResponse_Exception ( null , 401 ) ; $ e -> setResponse ( $ response ) ; throw $ e ; } return $ member ; }
Require basic authentication.  Will request a username and password if none is given.

Used by {@link Controller::init()}.


@param HTTPRequest $request
@param string $realm
@param string|array $permissionCode Optional
@param boolean $tryUsingSessionLogin If true, then the method with authenticate against the
session log-in if those credentials are disabled.
@return bool|Member
@throws HTTPResponse_Exception
Require basic authentication . Will request a username and password if none is given .