ফায়ারবেস অনুমতি অস্বীকৃত


123

আমি কোডিংয়ে তুলনামূলকভাবে নতুন এবং সমস্যা হচ্ছে।

ফায়ারবেসে ডেটা প্রেরণের জন্য আমার এই কোডটি রয়েছে

app.userid = app.user.uid

var userRef = app.dataInfo.child(app.users);

var useridRef = userRef.child(app.userid);

useridRef.set({
  locations: "",
  theme: "",
  colorScheme: "",
  food: ""
});

তবে, আমি ত্রুটিটি পেতে থাকি:

আগুনের সতর্কতা: সেট / ইউজার / (গুগলআইডি) ব্যর্থ হয়েছে: অনুমতি_নেডেড 2016-05-23 22: 52: 42.707 ফায়ারবেস.জেএস: 227 অপ্রকাশিত (প্রতিশ্রুতিতে) ত্রুটি: পারমিশন_ডিনিড: অনুমতি অস্বীকার করেছে (…)

আমি যখন এটি দেখার চেষ্টা করি তখন এটি ফায়ারবেসের নিয়মের বিষয়ে কথা বলে, যা এমন ভাষায় বলে মনে হয় যা আমি এখনও শিখি নি (বা এটি কেবল আমার মাথার উপর দিয়ে যাচ্ছে)। কেউ কি ব্যাখ্যা করতে পারে যে সমস্যাটি কী কারণে ঘটছে? আমি ভেবেছিলাম যে এটি ইমেল এবং ব্যবহারকারীর প্রদর্শনের নাম সঞ্চয় করার জন্য বলছিলাম এবং আপনাকে কেবল এটি করার অনুমতি দেওয়া হয়নি তবে আমি যখন তাদের বের করেছিলাম তখনও আমার একই সমস্যা ছিল। বিধিগুলি নির্ধারণ না করে এই ত্রুটি এড়ানোর কোনও উপায় আছে, বা এমন কোনও নিয়ম যা আমি নিজেকে কীভাবে একটি দিনে লিখতে পারি তা শেখাতে পারি, বা আমি কি কেবল আমার লীগ থেকে বেরিয়ে আসছি?

কোন সাহায্যের জন্য ধন্যবাদ!

উত্তর:


250

ডিফল্টরূপে ফায়ারবেস কনসোলের কোনও প্রকল্পের ডেটাবেস প্রশাসনিক ব্যবহারকারীদের দ্বারা কেবল পঠনযোগ্য / লেখার জন্য উপযুক্ত (যেমন ক্লাউড ফাংশনস বা অ্যাডমিন এসডিকে ব্যবহারকারী প্রক্রিয়াগুলিতে)। নিয়মিত ক্লায়েন্ট-সাইড এসডিকে ব্যবহারকারীরা ডাটাবেস অ্যাক্সেস করতে পারবেন না, যদি না আপনি সার্ভার-সাইড সুরক্ষা বিধি পরিবর্তন করেন।


আপনি নিয়মগুলি পরিবর্তন করতে পারেন যাতে ডেটাবেস কেবলমাত্র প্রামাণিক ব্যবহারকারীদের দ্বারা পঠনযোগ্য / লেখার জন্য:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

ফায়ারবেস ডাটাবেস সুরক্ষা বিধিগুলির জন্য কুইকস্টার্টটি দেখুন ।

আপনি যেহেতু আপনার কোড থেকে ব্যবহারকারীকে সাইন ইন করছেন না তাই ডাটাবেস আপনাকে ডেটাতে অ্যাক্সেস অস্বীকার করে। এটি সমাধান করার জন্য আপনাকে হয় আপনার ডেটাবেজে অযৌক্তিক অ্যাক্সেসের অনুমতি দিতে হবে, বা ডাটাবেস অ্যাক্সেস করার আগে ব্যবহারকারীকে সাইন ইন করতে হবে।

আপনার ডাটাবেসে অযৌক্তিক অ্যাক্সেসের অনুমতি দিন

এই মুহুর্তের জন্য সবচেয়ে সহজ কাজ (টিউটোরিয়ালটি আপডেট না হওয়া অবধি) আপনার প্রকল্পের জন্য কনসোলের ডেটাবেস প্যানেলে যেতে হবে, নিয়ম ট্যাবটি নির্বাচন করুন এবং এই বিধিগুলি সহ সামগ্রীগুলি প্রতিস্থাপন করুন:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

এটি আপনার নতুন ডাটাবেসটিকে পাঠযোগ্য এবং লেখার যোগ্য করে তোলে যিনি ডেটাবেসের ইউআরএল জানেন। আপনি প্রোডাকশনে যাওয়ার আগে আপনার ডাটাবেসটিকে আবার সুরক্ষিত করার বিষয়ে নিশ্চিত হন, অন্যথায় কেউ এর অপব্যবহার শুরু করার সম্ভাবনা রয়েছে।

ডাটাবেস অ্যাক্সেস করার আগে ব্যবহারকারীর সাইন ইন করুন

একটি (সামান্য) আরও সময় সাশ্রয়ী, তবে আরও সুরক্ষিত, সমাধানের জন্য, ডাটাবেস অ্যাক্সেস করার আগে ব্যবহারকারী সাইন ইন হয়েছে তা নিশ্চিত করতে ফায়ারবেস প্রমাণীকরণের একটি signIn...পদ্ধতি কল করুন । এটি করার সহজতম উপায় হ'ল অজ্ঞাতনামা প্রমাণীকরণ :

firebase.auth().signInAnonymously().catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

এবং তারপরে সাইন-ইন সনাক্ত হওয়ার পরে আপনার শ্রোতাদের সংযুক্ত করুন

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
    var isAnonymous = user.isAnonymous;
    var uid = user.uid;
    var userRef = app.dataInfo.child(app.users);

    var useridRef = userRef.child(app.userid);

    useridRef.set({
      locations: "",
      theme: "",
      colorScheme: "",
      food: ""
    });

  } else {
    // User is signed out.
    // ...
  }
  // ...
});

1
ধন্যবাদ - এই অ্যাম্বার টিউটোরিয়ালে ফায়ারবেস অনুমতি সংক্রান্ত সমস্যার অতীত প্রগতির অনুরূপ প্রশ্নের উত্তরে আপনার নিরাপত্তাহীনতার সমাধান এবং আপনার উত্তরটি উদ্ধৃত করা হয়েছে । তবে আমরা কোথায় (নিরাপদ) বেনামে লেখক কোড যুক্ত করব?
ডেভ এভারিট

2
ওএমজি সেখানে এক ঘন্টা যায়। আমার সেখানে এটি ছিল তবে মানগুলি ভুয়া ছিল ... আমি কেবল এটি উপেক্ষা করেছি। এগুলি সত্য এবং বামে পরিবর্তন করা হয়েছে, অ্যাপটি এমনভাবে কাজ করছে যা আপনি ভাবেন ...
অ্যান্ডি

ওএমজি, আমিও জানি না যে তারা অনুমতিতে ব্যর্থ হচ্ছিল কেন তারা যখনই দু'জনেই ইতিমধ্যে মিথ্যাতে সেট করা হয়েছিল (আমি আপনার মন্তব্যটি না পড়ি)। দুহ, খুব ভুল।, আপনি যখন এটি জনসাধারণের জন্য উন্মুক্ত করে দিচ্ছেন তখন (উভয়ই) ভুল হওয়া উচিত। আপনার নিজের ত্রুটিটি নির্দেশ করার জন্য ধন্যবাদ, আপনি আমাকে এটি বের করতে সহায়তা করেছিলেন। রেকর্ডের জন্য আমি আমার নিয়মটিকে এটিতে পরিবর্তন করেছি: ".পড়ুন": সত্য এবং তারপরে এটি কাজ শুরু করে।
ঠিকাদার

@ অ্যান্ডি ধন্যবাদ মানুষ, আমার সমান এবং আপনার মন্তব্যটি দেখে আমার সমস্যার সমাধান হয়েছে;)
মাহমুদুল হাসান সোহাগ

86

আমি অনুরূপ সমস্যার মুখোমুখি হয়েছি এবং জানতে পেরেছি যে এই ত্রুটিটি রিয়েল টাইম ডাটাবেসের জন্য পড়া / লেখার ক্রিয়াকলাপগুলির জন্য সেট করা ভুল নিয়মের কারণে হয়েছিল was ডিফল্টরূপে গুগল ফায়ারবেস আজকাল মেঘের স্টোর রিয়েল টাইম ডাটাবেস নয় not আমাদের রিয়েল টাইমে স্যুইচ করতে হবে এবং সঠিক নিয়ম প্রয়োগ করতে হবে।

এখানে চিত্র বর্ণনা লিখুন

যেহেতু আমরা দেখতে পাচ্ছি মেঘ ফায়ারস্টোর রিয়েল টাইম ডাটাবেস নয়, একবারে ডাটাবেসকে সঠিকভাবে স্যুইচ করে নিয়মের নীচে প্রয়োগ করুন:

{
   "rules": {
       ".read": true,
       ".write": true
     }
 }

3
অভিঘাত ইউআই! আমি কেন সারাবিশ্বে বিভিন্ন নিয়ম আছে তা ভেবে সারা দিন কাটিয়েছি ... আহ ... এটি "মেঘের আগুনের দোকান" এর জন্য ছিল ... ধন্যবাদ!
আলেক্সি ভোলডকো

43

আপনি উল্লিখিত "ডাটাবেস" বিকল্পে যান।

  1. নীল শিরোনামে আপনি একটি ড্রপডাউন পাবেন যা ক্লাউড ফায়ারস্টোর বিটা বলে
  2. এটিকে "রিয়েলটাইম ডাটাবেস" এ পরিবর্তন করুন
  3. বিধিগুলিতে যান এবং সেট করুন .লিখন। দুটিই সত্যে পড়ুন

এখান থেকে অনুলিপি করা হয়েছে


11

ডাটাবেসে যান, শিরোনামের পাশে 2 টি বিকল্প রয়েছে:

ক্লাউড ফায়ার স্টোর, রিয়েলটাইম ডাটাবেস

রিয়েলটাইম ডাটাবেস নির্বাচন করুন এবং নিয়মে যান

নিয়মে সত্যে পরিবর্তন করুন।

এটি আমার সমস্যার সমাধান করেছে।


4
  1. ফায়ারবেস খুলুন, বাম দিকে ডাটাবেস নির্বাচন করুন।
  2. এখন ডানদিকে, ড্রপডাউন থেকে [রিয়েলটাইম ডাটাবেস] নির্বাচন করুন এবং নিয়মগুলিকে এতে পরিবর্তন করুন: {"নিয়ম": {".পঠন": সত্য, ".লিখন": সত্য}}

এটা কাজ করে .. !!


5
অন্য উত্তরে এটি ইতিমধ্যে বলা হয়েছে। এছাড়াও আপনি যখন এই পরামর্শ দেন তখন কোনও সতর্কতা যুক্ত করা নিশ্চিত করুন কারণ এটি সংরক্ষণ করা হয়নি!
আন্দ্রে কুল

4

ঠিক আছে, তবে আপনি পুরো রিয়েলটাইম ডাটাবেসটি খুলতে চান না! আপনার এইরকম কিছু দরকার।

{
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {
    ".read": "auth.uid !=null",
    ".write": "auth.uid !=null"
  }
}

অথবা

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

2

আরেকটি সমাধান হ'ল যদি আপনার কাছে ইতিমধ্যে শংসাপত্রগুলি কার্যকর থাকে তবে ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে তৈরি বা লগইন করা। এখানে আমি সমতল জেএস ব্যবহার করে এটি কীভাবে করব।

function loginToFirebase(callback)
{
    let email = 'xx@xx.com';
    let password = 'xxxxxxxxxxxxxx';
    let config =
    {
        apiKey: "xxx",
        authDomain: "xxxxx.firebaseapp.com",
        projectId: "xxx-xxx",
        databaseURL: "https://xxx-xxx.firebaseio.com",
        storageBucket: "gs://xx-xx.appspot.com",
    };

    if (!firebase.apps.length)
    {
        firebase.initializeApp(config);
    }

    let database = firebase.database();
    let storage = firebase.storage();

    loginFirebaseUser(email, password, callback);
}

function loginFirebaseUser(email, password, callback)
{
    console.log('Logging in Firebase User');

    firebase.auth().signInWithEmailAndPassword(email, password)
        .then(function ()
        {
            if (callback)
            {
                callback();
            }
        })
        .catch(function(login_error)
        {
            let loginErrorCode = login_error.code;
            let loginErrorMessage = login_error.message;

            console.log(loginErrorCode);
            console.log(loginErrorMessage);

            if (loginErrorCode === 'auth/user-not-found')
            {
                createFirebaseUser(email, password, callback)
            }
        });
}

function createFirebaseUser(email, password, callback)
{
    console.log('Creating Firebase User');

    firebase.auth().createUserWithEmailAndPassword(email, password)
        .then(function ()
        {
            if (callback)
            {
                callback();
            }
        })
        .catch(function(create_error)
        {
            let createErrorCode = create_error.code;
            let createErrorMessage = create_error.message;

            console.log(createErrorCode);
            console.log(createErrorMessage);
        });
}

এটি সত্যই খারাপ নিরাপত্তা বুদ্ধিমান।
এএসএইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.