Я использую Cloud SQL на Google App Engine. После добавления нового пользователя в консоль и повторного развертывания приложения новый пользователь не может войти в систему? - PullRequest
0 голосов
/ 04 июля 2019

Когда я добавляю нового пользователя и пароль в консоли GCP, обновляю и жду, а затем повторно внедряю и запускаю свое веб-приложение. Я не могу войти в систему с этим пользователем. Я все еще могу войти с моим первоначальным тестовым пользователем (первым и единственным пользователем до сих пор, кроме администратора 'postgres' user)

Я попытался удалить и повторно добавить того же пользователя. Я попытался добавить еще одного пользователя и развернуть его - снова пытаетесь войти в систему. Я позаботился о том, чтобы обновился, и дождался, пока изменения вступят в силу, перед повторным развертыванием веб-приложения. Я вошел в систему со своим исходным пользователем, выйдите из системы и попробуйте войти в систему с новым пользователем, также первоначально с новым пользователем. Я искал в Интернете ответы, но на удивление безрезультатно.

Основной, внешний файл app.py, в котором есть управление пользователями / код авторизации с использованием функций Flask и flask_login:

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import sys

#sys.path.append('/Users/crowledj/Mindfule/dash-flask-login/views/')
#sys.path.append('/Users/crowledj/Mindfule/dash-flask-login/flask_login/')

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__ , external_stylesheets=external_stylesheets)


#server=app.server

app.css.append_css({'external_url': 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css'})


from server import app, server
from flask_login import logout_user, current_user
import success, login, login_fd, logout
#import sqlalchemy

header = html.Div(
    className='header',
    children=html.Div(
        className='container-width',
        style={'height': '100%'},
        children=[
            html.Img(
                src='mindfule_company_logo.jpg',
                className='logo'
            ),
            html.Div(className='links', children=[
                html.Div(id='user-name', className='link'),
                html.Div(id='logout', className='link')
            ])
        ]
    )
)

app.layout = html.Div(
    [
        header,
        html.Div([
            html.Div(
                html.Div(id='page-content', className='content'),
                className='content-container'
            ),
        ], className='container-width'),
        dcc.Location(id='url', refresh=False),
    ]
)


@app.callback(Output('page-content', 'children'),
              [Input('url', 'pathname')])
def display_page(pathname):
    if pathname == '/':
        return login.layout
    elif pathname == '/login':
        return login.layout
    elif pathname == '/success':
        if current_user.is_authenticated:
            print('returning success page from main app ...  \n')
            return success.layout
        else:
            return login_fd.layout
    elif pathname == '/logout':
        if current_user.is_authenticated:
            logout_user()
            return logout.layout
        else:
            return logout.layout
    else:
        return '404'


@app.callback(
    Output('user-name', 'children'),
    [Input('page-content', 'children')])
def cur_user(input1):
    if current_user.is_authenticated:
        return html.Div('Current user: ' + current_user.username)
        # 'User authenticated' return username in get_id()
    else:
        return ''


@app.callback(
    Output('logout', 'children'),
    [Input('page-content', 'children')])
def user_logout(input1):
    if current_user.is_authenticated:
        return html.A('Logout', href='/logout')
    else:
        return ''


if __name__ == '__main__':
    app.run_server(debug=True,port=8080,host= "foodmoodai.appspot.com")  #"0.0.0.0")  #

единственный код, связанный с Postgres и SQL, @ начало файла моей страницы 'success':

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State

import plotly.graph_objs as go

from textwrap import dedent as d

from flask import Flask
import pandas as pd
import numpy as np
from NutrientParser import parseNutrientStr_frmUser,parseResearch,parseFoodResearch,find_substring
from userMindfuleClasses import *
import PIL  
import urllib3
from PIL import Image
import json,os
import arrow


from server import app
from flask_login import current_user

import psycopg2
from datetime import datetime

timeStamp=datetime.now()

#db_user='test'
#db_pass='test1'
#db_name='foodnmood-db'
#INSTANCE_CONNECTION_NAME='foodmoodai:europe-west2:foodnmood-db'


from sqlalchemy import Table, Column, Integer, String, MetaData,create_engine
meta = MetaData()

#engine = create_engine('postgresql+psycopg2://postgres:Pollgorm1@/cloudsql/foodmoodai:europe-west2:foodnmood-db')
engine = create_engine('postgresql+psycopg2://postgres:Pollgorm1@/?host=/cloudsql/foodmoodai:europe-west2:foodnmood-db')


mealnMoodwithTimesnFoods = Table(
    'mealnMoodwithTimesnFoods', meta, 
    Column('time', String, primary_key = True),
    Column('id', String), 
    Column('food_1', String), 
    Column('food_2', String),
    Column('food_3', String), 
    Column('mood', String), 

)

meta.create_all(engine)

Я ожидаю, что смогу по крайней мере добавить нового пользователя (который автоматически имеет разрешения на вход в систему) и войти в систему после страницы входа в систему при повторном развертывании приложения после внесения этого изменения в консоли GCP.

1 Ответ

0 голосов
/ 11 июля 2019

Проблема, как оказалось, на самом деле полностью связана с локальной библиотекой аутентификации, которую я установил с GitHub - которая использует 'flask_login' (flask_login == 0.4.1 -> pip install flask-login == 0.4.1 ). Все, что мне нужно было сделать, это обновить нового пользователя и пароль в локальном файле .txt, а также в облачной консоли SQL gcloud.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...