Доступ к странице, если пользователь не вошел в систему?

У меня есть логин в моем новом приложении, которое проверяет каждый запрос на вход пользователя в систему. Если пользователь не вошел в систему, он будет автоматически перенаправлен на страницу входа. У меня есть ситуация, когда пользователь нажимает на Forgot Password, В этом случае я сгенерировал временную ссылку, которая будет направлять пользователя на reset.cfm стр. Однако проблема в том, что пользователь не вошел в систему, и если я пытаюсь нажать на ссылку, которая должна направить меня к reset.cfm мой код направит меня вместо login.cfm, Вот логика, которую я использую в Application.cfc:

public boolean function onRequestStart(required string thePage) output="false" {
    local.page = listLast(arguments.thePage,"/");
    //onApplicationStart();

    if(!listFindNoCase("Login.cfm,Authentication.cfc",page)){
        if(structKeyExists(SESSION, "loggedin") AND SESSION.loggedin EQ false){
           location(url="https://example.com", addToken="false");
        }
    }

    return true;
}

Как видно из приведенного выше примера, при каждом запросе я проверяю флаг loggedin, Мне интересно, как я могу позволить пользователю доступ Reset.cfm?token=94129873129 ссылка на страницу? Я хотел бы, чтобы моя логика работала одинаково для пользователей, которые не вошли в систему. В то же время мне нужно дать им доступ к Reset.cfm, Если у кого-то есть предложения о том, как этого можно достичь или лучший способ справиться с этим, пожалуйста, дайте мне знать. Одним из решений, о котором я думал, было это решение, в Main.cfm:

<cfif structKeyExists(url,"token")>
    <cfinclude template="Reset.cfm">
<cfelse>
    <cfinclude template="Login.cfm">
</cfif>

Если параметр URL token существует, то прямой пользователь Reset.cfm если не Login.cfm,

1 ответ

Здравствуйте, вы можете написать условия, как показано ниже. Пожалуйста, добавьте концепцию белого списка. В этот список вы можете добавить список файлов (к какому файлу вы можете получить доступ без входа в систему. Здесь я привел пример reset.cfm и register.cfm для обоих файлов, к которым мы можем получить доступ без входа в систему). Затем наложите на них условие, как показано ниже.

public any function onRequestStart(required string thePage) output="false" {
        local.page = listLast(CGI.SCRIPT_NAME,"/");
        local.whiteList = ['reset.cfm','register.cfm']; // Here you can add what are pages you want to access without login.

        if( local.page NEQ 'login.cfm' AND !StructKeyExists( session, "loggedin" ) && !arrayFindNoCase(local.whiteList,local.page ) ) {
            location( url="login.cfm", addtoken='false' );
        }

    }

Я надеюсь, что это будет полезно для вас. Пожалуйста, дайте мне знать ваши мысли по этому поводу.

Другие вопросы по тегам